2013-04-15 49 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。 –