2

假设我有以下文件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。有没有更直接的解决方案?

4

2 回答 2

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'
于 2013-01-10T11:35:17.307 回答
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
于 2013-01-10T11:33:59.210 回答