2014-04-02 135 views
7

我曾經用numpy.loadtxt()閱讀我的數據。不過,最近我在SO中發現,pandas.read_csv()要快得多。用大熊貓閱讀空間分隔的數據

讀取這些數據我用:

pd.read_csv(filename, sep=' ',header=None) 

,我遇到現在的問題是,在我的情況下,分離器可以從一個空間,X空間,甚至一個標籤不一致的問題。

這裏怎麼我的數據可能看起來像:

56.00  101.85 52.40 101.85 56.000000 101.850000 1 
56.00 100.74 50.60 100.74 56.000000 100.740000 2 
56.00 100.74 52.10 100.74 56.000000 100.740000 3 
56.00 102.96 52.40 102.96 56.000000 102.960000 4 
56.00 100.74 55.40 100.74 56.000000 100.740000 5 

這導致類似的結果:

 0  1  2  3  4  5 6  7 8 
0 56  NaN NaN 101.85 52.4 101.85 56 101.85 1 
1 56 100.74 50.6 100.74 56.0 100.74 2  NaN NaN 
2 56 100.74 52.1 100.74 56.0 100.74 3  NaN NaN 
3 56 102.96 52.4 102.96 56.0 102.96 4  NaN NaN 
4 56 100.74 55.4 100.74 56.0 100.74 5  NaN NaN 

我指定我的數據是> 100 MB。所以我不能預先處理數據或先清理它們。 任何想法如何得到這個固定?

+0

做了'pd.r ead_csv(filename,sep ='\ s +',header = None)'工作嗎? – EdChum

+0

確實有幫助!謝謝!我如何接受你的評論作爲我的問題的答案? – Tengis

+0

它是正則表達式,意思是至少有一個空格,我應該將其作爲答案嗎? – EdChum

回答

10

您的原始行:

pd.read_csv(filename, sep=' ',header=None) 

被指定分隔爲一個單一的空間,因爲你的CSV可以有空格或製表符可以傳遞一個正則表達式的sep PARAM像這樣:

pd.read_csv(filename, sep='\s+',header=None) 

這將分隔符定義爲一個單獨的空格或更多,有一個方便的備忘錄列出了regular expressions.