2013-04-15 50 views
9

我使用pandas.read_csv来读取空格分隔的文件。该文件在每行前面有一个可变数量的空白字符(数字右对齐)。当我读这个文件时,它创建了一列NaN。为什么会发生这种情况,以及防止它发生的最佳方法是什么?使用熊猫阅读带有空白符的文本文件给出NaN列

例子:

文本文件:

9.0 3.3 4.0 
32.3 44.3 5.1 
    7.2 1.1 0.9 

命令:

import pandas as pd 
pd.read_csv("test.txt",delim_whitespace=True,header=None) 

输出:

0  1  2 3 
0 NaN 9.0 3.3 4.0 
1 NaN 32.3 44.3 5.1 
2 NaN 7.2 1.1 0.9 
+0

它看起来像有人[在GitHub上开辟了一个问题(https://github.com/pydata/pandas/issues/3374)基于这个帖子: – Caleb

回答

13

FWIW我倾向于使用\s+,而是和它doesn” t suf FER同样的问题:

>>> pd.read_csv("wspace.csv", header=None, delim_whitespace=True) 
    0  1  2 3 
0 NaN 9.0 3.3 4.0 
1 NaN 32.3 44.3 5.1 
2 NaN 7.2 1.1 0.9 
>>> pd.read_csv("wspace.csv", header=None, sep=r"\s+") 
     0  1 2 
0 9.0 3.3 4.0 
1 32.3 44.3 5.1 
2 7.2 1.1 0.9 
+0

有趣的是这会有所不同(我也使用'\ s +''),肯定是一个错误? –

+1

我们不应该使用'\ s +''。 [相关熊猫教程页面](http://pandas.pydata.org/pandas-docs/stable/io.html)表示'delim_whitespace = True'应该会更快。 我会等待任何其他可能解释这个问题的答案,但可能会将此标记为我的解决方案。 – Caleb

+0

这是'delim_whitespace'的一个很模糊的例子。我不清楚什么是正确的行为 - “'s +”“基本上是”偶然“工作的AFAICT。 –