微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

(我在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的答案更好地理解这一点虽然它对我来说似乎并不合适(认行为,也就是说,不是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”视为纯文本,而不是NaN /缺失.是否有任何其他包或库与pandas具有相同的认行为?

解决方法:

您需要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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐