Python 防止熊猫解读';NA';一串
pandas方法将“NA”解释为nan(不是数字),而不是有效字符串 在下面的简单示例中,请注意第1行第2列(基于零的计数)中的输出是“nan”而不是“NA” sample.tsv(制表符分隔) PDB链SP_主RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_ENDPython 防止熊猫解读';NA';一串,python,pandas,Python,Pandas,pandas方法将“NA”解释为nan(不是数字),而不是有效字符串 在下面的简单示例中,请注意第1行第2列(基于零的计数)中的输出是“nan”而不是“NA” sample.tsv(制表符分隔) PDB链SP_主RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END 5d8b N P60490 1 146 1 146 1 146 5d8b NA P803771126 1126126 5d8b O P60491 1181 118 读取样本.py 将熊猫作为pd导
5d8b N P60490 1 146 1 146 1 146
5d8b NA P803771126 1126126
5d8b O P60491 1181 118
读取样本.py
将熊猫作为pd导入
df=pd.read\u csv(
“sample.tsv”,
sep='\t',,
编码='utf-8',
)
对于df.itertuples(index=True)中的df_元组:
打印(df_元组)
输出
(0,u'5d8b',u'N',u'P60490',1146,1146,1146)(1,u'5d8b',nan,u'P80377',1126,1126,1126)
(2,u'5d8b',u'O',u'P60491',1118,1118,1118)
补充资料 在“链”列中用引号重新写入文件,然后使用quotechar参数
quotechar='\''
得到相同的结果。通过dtype参数dtype=dict(valid\u cols)
传递类型字典不会改变结果
一个旧的答案建议首先使用numpy记录数组来解析文件,但是现在可以指定列数据类型,这应该是不必要的
请注意,itertuples()用于保留数据类型,如iterrows文档中所述:“要在对行进行迭代时保留数据类型,最好使用itertuples(),它返回值的元组,通常比iterrows更快。”
该示例在Python2和Python3上测试,版本分别为0.16.2、0.17.0和0.17.1
是否有方法捕获有效字符串“NA”而不是将其转换为nan?您可以使用参数
保留默认值\u NA
和NA值
手动设置所有NA值:
将熊猫作为pd导入
从io导入StringIO
data=”“”
PDB链SP_主RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
5d8b N P60490 1 146 1 146 1 146
5d8b NA P80377 126 1 126
5d8b O P60491 1181 118
"""
df=pd.read\u csv(StringIO(数据),sep='',keep\u default\u na=False,na\u values=[''']
In[130]:df
出[130]:
PDB链SP_主RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
0 5d8b N P60490 1 146 1 146 1 146
1 5d8b NA P80377 NaN 126 1 126 1 126
2 5d8b O P60491 1181 118
In[144]:df.CHAIN.apply(类型)
出[144]:
0
1.
2.
名称:链,数据类型:对象
编辑
所有默认值NA
来自(自pandas
1.0.0起):
默认的NaN识别值为['-1.#IND',1.#QNAN',1.#IND','-1.#QNAN','#N/A N/A','#N/A',N/A',N/A',NA','''''.'.#NA',NULL',NULL',NaN','-NaN',NaN','-NaN',''.''''
您可以使用参数
keep_default_na
和na_值
手动设置所有na值:
将熊猫作为pd导入
从io导入StringIO
data=”“”
PDB链SP_主RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
5d8b N P60490 1 146 1 146 1 146
5d8b NA P80377 126 1 126
5d8b O P60491 1181 118
"""
df=pd.read\u csv(StringIO(数据),sep='',keep\u default\u na=False,na\u values=[''']
In[130]:df
出[130]:
PDB链SP_主RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
0 5d8b N P60490 1 146 1 146 1 146
1 5d8b NA P80377 NaN 126 1 126 1 126
2 5d8b O P60491 1181 118
In[144]:df.CHAIN.apply(类型)
出[144]:
0
1.
2.
名称:链,数据类型:对象
编辑
所有默认值NA
来自(自pandas
1.0.0起):
默认的NaN识别值为['-1.#IND',1.#QNAN',1.#IND','-1.#QNAN','#N/A N/A','#N/A',N/A',N/A',NA','''''.'.#NA',NULL',NULL',NaN','-NaN',NaN','-NaN',''.''''
对于我来说,解决方案来自于使用参数
na_filter=False
df = pd.read_csv(file_, header=0, dtype=object, na_filter = False)
对于我来说,解决方案来自于使用参数
na_filter=False
df = pd.read_csv(file_, header=0, dtype=object, na_filter = False)
设置
keep\u default\u na
参数会起作用
下面是一个使用Pandas读取CSV文件时将NA
保留为字符串值的示例
data.csv
:
country_name,country_code
Mexico,MX
Namibia,NA
读取数据.py
:
import pandas as pd
data = pd.read_csv("data.csv", keep_default_na=False)
print(data.describe())
print(data)
输出:
country_name country_code
count 2 2
unique 2 2
top Namibia MX
freq 1 1
country_name country_code
0 Mexico MX
1 Namibia NA
参考资料:
保持默认值\u na
参数起作用
下面是一个使用Pandas读取CSV文件时将NA
保留为字符串值的示例
data.csv
:
country_name,country_code
Mexico,MX
Namibia,NA
读取数据.py
:
import pandas as pd
data = pd.read_csv("data.csv", keep_default_na=False)
print(data.describe())
print(data)
输出:
country_name country_code
count 2 2
unique 2 2
top Namibia MX
freq 1 1
country_name country_code
0 Mexico MX
1 Namibia NA
参考资料:
import pandas as pd
df = pd.read_csv('Test.csv')
co1 col2 col3 col4
a b c d e
NaN NaN NaN NaN NaN
2 3 4 5 NaN
我复制了该值并创建了一个默认解释为NaN的列表,然后注释掉我希望解释为非NaN的NA。这种方法仍然将除NA之外的其他值视为NaN
na_values = ["",
"#N/A",
"#N/A N/A",
"#NA",
"-1.#IND",
"-1.#QNAN",
"-NaN",
"-nan",
"1.#IND",
"1.#QNAN",
"<NA>",
"N/A",
# "NA",
"NULL",
"NaN",
"n/a",
"nan",
"null"]
df1 = pd.read_csv('Test.csv',na_values=na_values,keep_default_na=False )
co1 col2 col3 col4
a b c d e
NaN NA NaN NA NaN
2 3 4 5 NaN
na_值=[“”,
“#不适用”,
“#不适用不适用”,
“#那”,
“-1.#IND”,
“-1.#QNAN”,
“-NaN”,
“-nan”,
“1.#IND”,
“1.#QNAN”,
"",
“不适用”,
#“不适用”,
“空”,
“南”,
“不适用”,
“南”,
“空”]
df1=pd.read\u csv('Test.csv',na\u values=na\u values,keep\u default\u na=False)
co1 col2 col3 col4
a、b、c、d、e
楠楠楠楠楠楠楠楠
2 3 4 5南
这种方法对我很有效:
import pandas as pd
df = pd.read_csv('Test.csv')
co1 col2 col3 col4
a b c d e
NaN NaN NaN NaN NaN
2 3 4 5 NaN
我复制了该值并创建了一个默认解释为NaN的列表,然后注释掉我想要的NA