当从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值'是什么?
答案 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
中修复的