熊猫 Read _ csv ()方法将‘ NA’解释为 nan (而不是数字) ,而不是一个有效的字符串。
在下面的简单示例中,请注意第1行中的输出,第2列(从零开始计数)是“ nan”而不是“ NA”。
Tsv (以 tab 分隔)
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 P80377112611261126
5d8b O P60491111811181118 < br >
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)
输出
(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) < br >
Re-writing the file with quotes for data in the 'CHAIN' column and then using the quotechar parameter quotechar='\''
has the same result. And passing a dictionary of types via the dtype parameter dtype=dict(valid_cols)
does not change the result.
对于 Prevent pandas from automatically inferring type in read_csv的一个老的回答是,建议首先使用一个数字记录数组来解析文件,但是考虑到现在可以指定列 dtype,这应该没有必要。
请注意,itertuples ()用于保留在 iterrows 文档中描述的 dtype: “为了在对行进行迭代时保留 dtype,最好使用 itertuples () ,它返回值的元组,并且作为 iterrows 通常更快。”
Example was tested on Python 2 and 3 with pandas version 0.16.2, 0.17.0, and 0.17.1.
有没有一种方法可以捕获一个有效的字符串‘ NA’,而不是将其转换为 nan?