pandas read_csv()方法将'NA'解释为nan(不是数字),而不是有效的字符串。
在下面的简单情况中,请注意第1行第2列(基于零的计数)中的输出是“nan”而不是“NA”。
示例.tsv(制表符分隔)
PDB链SP_主资源_请求资源_结束PDB_请求PDB_结束SP_请求SP_结束
5d8b编号P60490 1 146 1 146 1 146
5d8b不适用P80377 1 126 1 126
5d8b O P60491 1 118 1 118 1 118 1 118
读取样本.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',南,u 'P80377',第126页,第126页,第126页)
(2,u“5d8b”,u“O”,u“P60491”,1,118,1,118,1,118)
其他信息
用引号将'CHAIN'列中的数据重新写入文件,然后使用quotechar参数quotechar='\''
,结果是相同的。通过dtype参数dtype=dict(valid_cols)
传递类型字典不会改变结果。
对Prevent pandas from automatically inferring type in read_csv的一个旧的回答建议首先使用numpy记录数组来解析文件,但是考虑到现在指定列数据类型的能力,这应该是没有必要的。
注意itertuples()用于保存数据类型,如iterrows文档中所述:“为了在遍历行时保留数据类型,最好使用itertuples(),它返回值的元组,通常比iterrows快.”
我们在Python 2和Python 3上使用panda 0.16.2、0.17.0和0.17.1版本对示例进行了测试。
有没有办法捕获一个有效的字符串'NA',而不是将其转换为nan?
6条答案
按热度按时间jogvjijk1#
您可以使用参数
keep_default_na
和na_values
手动设置所有NA值docs:编辑
na值的所有默认
NA
值(从pandas
1.0.0开始):默认的NaN可识别值为[“-1.#IND”、“1.#QNAN”、“1.#IND”、“-1.#QNAN”、"#N/A"、"#N/A"、"N/A"、“n/a”、“NA "、”“、”#NA“、”NULL“、”null“、”NaN"、“-NaN”、“nan”、“-nan”、“”]。
5ktev3wc2#
对我来说,解决方案来自于使用参数
na_filter = False
b1payxdu3#
设置
keep_default_na
参数就可以了。下面是一个使用Pandas阅读CSV文件时将
NA
保留为字符串值的示例。data.csv
:read_data.py
:输出量:
参考:
o75abkj44#
这种方法对我很管用:
我复制了值并创建了一个列表,默认情况下将其解释为NaN,然后注解掉我希望解释为非NaN的NA。这种方法仍然将除NA之外的其他值视为NaN。
w51jfk4q5#
使用panda阅读文件时,可以在该行中使用参数
na_filter = False
或keep_default_na=False
yduiuuwa6#
基于Anton Protopopov的answer,一种最小化修改默认值的简洁方法(即删除不想解析为NaN的值,并添加那些想解析为NaN的值):