(我已经开了一个issue https://github.com/pydata/pandas/issues/10647在 GitHub。)
以下行为对我来说似乎不正确。似乎如果默认为read_csv
is na_values=False
那么包括“NA”在内的任何值都不应被解释为 NaN,但情况似乎并非如此。
这种行为被注意到在这个帖子 https://stackoverflow.com/questions/31527138/slicing-a-pandas-dataframe-using-two-strings(请参阅@JianxunLi 的答案的评论),其中“NA”实际上意味着“北美”。实际上,我无法找到一种方法来读取它而不将其更改为 NaN,并且肯定应该有某种方法可以做到这一点。
这是 csv 示例。
%more foo.txt
x,y
"NA",NA
"foo",foo
我在引号和外部都添加了“NA”,看看这是否重要,但正如您在下面看到的那样,它似乎并不重要。
pd.read_csv('foo.txt')
Out[56]:
x y
0 NaN NaN
1 foo foo
pd.read_csv('foo.txt',na_values=False)
Out[57]:
x y
0 NaN NaN
1 foo foo
pd.read_csv('foo.txt',na_values='foo')
Out[58]:
x y
0 NaN NaN
1 NaN NaN
看来“NaN”的数据值与“NA”的处理方式相同。
编辑添加:我认为我根据@Marius的答案更好地理解了这一点,尽管它对我来说似乎并不正确(默认行为,即不是Marius的答案,这似乎是对正在发生的事情的正确解释)。
na_values=False => NA and NaN are treated as NaN
na_values='foo' => NA, NaN, and foo are treated as NaN
我想我可以理解这是数字列中的默认行为,但似乎这不应该是字符串列的默认行为。如果没有看到马吕斯的答案,我也很难从文档中弄清楚这一点。
编辑添加(2):
另外,为了进行比较,我将其读入 Stata 和 Excel,在这两种情况下,它们都将“NA”视为纯文本,而不是 NaN/缺失。是否有任何其他包或库具有与 pandas 相同的默认行为?