Python pandas read_table将零转换为NaN

时间:2013-01-10 11:24:44

标签: python pandas

说我有以下文件test.txt

Aaa Bbb
Foo 0
Bar 1
Baz NULL

(分隔符实际上是一个制表符,我似乎无法在这里输入。) 我尝试使用pandas(0.10.0)来阅读它:

In [523]: pd.read_table("test.txt")
Out[523]:
   Aaa  Bbb
0  Foo  NaN
1  Bar    1
2  Baz  NaN

请注意,第一列中的零值突然变为NaN!我期待像这样的DataFrame:

   Aaa   Bbb
0  Foo     0
1  Bar     1
2  Baz   NaN

为了获得后者需要改变什么?我想我可以使用pd.read_table("test.txt", na_filter=False)并随后用NaN替换'NULL'值并更改列dtype。有更直接的解决方案吗?

2 个答案:

答案 0 :(得分:2)

我认为这是问题#2599,“如果列包含任何nan,read_csv将零视为nan,”现在已关闭。我无法在我的开发版本中重现:

In [27]: with open("test.txt") as fp:
   ....:     for line in fp:
   ....:         print repr(line)
   ....:         
'Aaa\tBbb\n'
'Foo\t0\n'
'Bar\t1\n'
'Baz\tNULL\n'

In [28]: pd.read_table("test.txt")
Out[28]: 
   Aaa  Bbb
0  Foo    0
1  Bar    1
2  Baz  NaN

In [29]: pd.__version__
Out[29]: '0.10.1.dev-f7f7e13'

答案 1 :(得分:0)

尝试:

import pandas as pd
df = pd.read_table("14256839_input.txt", sep=" ", na_values="NULL")
print df
print df.dtypes

这给了我

   Aaa  Bbb
0  Foo    0
1  Bar    1
2  Baz  NaN
Aaa     object
Bbb    float64