这是read_csv的正确行为和NA的数据值吗?

时间:2015-07-21 00:46:32

标签: python pandas

(我在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具有相同的默认行为?

1 个答案:

答案 0 :(得分:3)

您需要keep_default_na=False,默认情况下,na_values中包含的所有字符串都会添加到标准的NA字符串集中,例如NANaN

pd.read_csv('foo.txt', keep_default_na=False)
Out[5]: 
     x    y
0   NA   NA
1  foo  foo