pandas read_csv()方法将'NA'解释为nan(不是数字)而不是有效字符串.
在下面的简单情况中,请注意第1行第2列(基于零的计数)的输出是'nan'而不是'NA'.
sample.tsv(制表符分隔)
PDB CHAIN SP_PRIMARY RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
5d8b N P60490 1 146 1 146 1 146
5d8b NA P80377 1 126 1 126 1 126
5d8b O P60491 1 118 1 118 1 118
read_sample.py
import pandas as pd
df = pd.read_csv(
'sample.tsv',
sep='\t',
encoding='utf-8',
)
for df_tuples in df.itertuples(index=True):
print(df_tuples)
Run Code Online (Sandbox Code Playgroud)
产量
(0,u'5d8b',u'N',u'P60490',1,146,1,146,1,146)
(1,u'5d8b',nan,u'P80377',1,126,1 ,
126,1,126 )(2,u'5d8b',u'O',u'P60491',1,118,1,118,1,118)
使用"CHAIN"列中的数据引号重写文件,然后使用quotechar参数quotechar='\''具有相同的结果.通过dtype参数传递类型字典dtype=dict(valid_cols)不会改变结果.
防止pandas在read_csv中自动推断类型的旧答案建议首先使用numpy记录数组来解析文件,但是由于现在能够指定列dtypes,因此这不是必需的.
请注意,itertuples()用于保存dtypes,如iterrows文档中所述:"为了在迭代行时保留dtypes,最好使用itertuples(),它返回值的元组,并且通常更快."
在Python 2和3上使用pandas版本0.16.2,0.17.0和0.17.1测试了示例.
有没有办法捕获有效的字符串'NA'而不是转换为nan?