(我在GitHub上打开了issue。)
以下行为对我来说似乎不正确。似乎read_csv
的默认值为na_values=False
,然后没有值包括' NA'应该被解释为NaN但似乎并非如此。
this post注意到了这种行为(请参阅@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的回答更好地理解了这一点,尽管它对我来说并不合适(默认行为,即不是马吕斯的答案,似乎是对正在发生的事情的正确解释。
na_values=False => NA and NaN are treated as NaN
na_values='foo' => NA, NaN, and foo are treated as NaN
我想我可以理解这是数字列中的默认行为,但它似乎不应该是字符串列的默认行为。在没有看到Marius的答案的情况下,我也很难从文档中弄清楚这一点。
修改为添加(2):
另外,为了进行比较,我把它读到了Stata和Excel中,在两种情况下,他们都会对待“NA' NA'作为纯文本,而不是NaN /缺失。是否有任何其他包或库与pandas具有相同的默认行为?
答案 0 :(得分:3)
您需要keep_default_na=False
,默认情况下,na_values
中包含的所有字符串都会添加到标准的NA字符串集中,例如NA
,NaN
:
pd.read_csv('foo.txt', keep_default_na=False)
Out[5]:
x y
0 NA NA
1 foo foo