Python 防止熊猫解读';NA';一串

Python 防止熊猫解读';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导

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导入
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