pandas.read_csv命名参数na_values默认值

时间:2014-10-30 17:48:45

标签: python pandas

当从csv,Excel,sql等导入数据时,Pandas会自动将某些值转换为NaN。(例如pandas.io.parsers中的方法)。

我的问题是,这些默认值是什么?

我注意到字符串"NA"会自动转换。作为others have noted,可以通过在调用导入数据的函数(例如pandas.io.parsers.read_csv)时传递keep_default_na=False来禁用此自动转换。

那就是说,我不知道"NA"以外的哪些值会被自动转换。在the docs中,我所能找到的是keep_default_na参数的以下描述:

  

keep_default_na:bool,默认为True   如果指定了na_values并且keep_default_na为False,则会覆盖默认的NaN值,否则它们会被附加到

我想知道的是,前面提到的'默认NaN值'是什么?

1 个答案:

答案 0 :(得分:1)

Jeff大约一年前提供了一个链接,但由于以下链接很麻烦,我在这里移动了信息。

['-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A','N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan']

来源:http://pandas.pydata.org/pandas-docs/stable/io.html#na-values

无论其

此列表不完整。

import pandas as pd
from StringIO import StringIO

sio = StringIO()
sio.write('"foo","bar"\n"1",""\n"NA","4"')
sio.seek(0)
pd.read_csv(sio, sep=",", quotechar='"')
   foo  bar
0    1  NaN
1  NaN    4

注意空字符串不是列表的一部分,但默认情况下它仍会被解析为NaN?

pd.read_csv(sio, sep=",", quotechar='"',
            keep_default_na=False,
            na_values=['-1.#IND', '1.#QNAN', '1.#IND',
                       '-1.#QNAN', '#N/A','N/A', '#NA', 'NA'
                       'NULL', 'NaN', '-NaN', 'nan', '-nan'])

  foo bar
0   1    
1 NaN   4

如果此列表是默认列表,则这两个命令应该产生完全相同的结果。

他们没有。

如果您想重现pandas.read_csv的默认行为,这是您需要的列表:

['', '-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A','N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan']

Pandas版本供参考:

pd.__version__
'0.15.2'

带有pandas的错误票:

https://github.com/pydata/pandas/issues/10700

更新

这是在pandas 0.17

中修复的