pandas.read_csv 的 na_values 默认值问题
Pandas在从csv、Excel、sql等导入数据时,会自动把某些值转换成NaN
(表示缺失值)。
我想问的是,这些默认会被转换的值有哪些呢?
我注意到字符串"NA"
会被自动转换。正如其他人提到的,你可以通过在调用导入数据的函数时传入keep_default_na=False
来关闭这种自动转换(比如使用pandas.io.parsers.read_csv)。
不过,我不知道除了"NA"
之外,还有哪些值会被自动转换。在文档中,我只找到关于keep_default_na
参数的以下描述:
keep_default_na : 布尔值,默认是True 如果指定了na_values并且keep_default_na为False,默认的NaN值会被覆盖,否则会被添加到列表中。
我想知道的就是,前面提到的那些“默认NaN值”到底是什么?
1 个回答
1
杰夫在差不多一年前提供了一个链接,但因为跟踪链接比较麻烦,所以我把信息搬到这里来了。
['-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的bug报告:
https://github.com/pydata/pandas/issues/10700
更新
这个问题在Pandas 0.17版本中已经修复。