2013-02-22 34 views
34

我需要使用存儲在文件中的數據創建數據框。爲此,我想使用read_csv方法。但是,分隔符不是很規則。某些列由製表符分隔(\t),其他用空格分隔。此外,某些列可以由2或3或更多空格分隔,甚至可以由空格和製表符組合(例如3個空格,兩個製表符和1個空格)。如何使read_csv中的分隔符更加靈活wrt空格?

有沒有辦法讓大熊貓正確處理這些文件?

順便說一句,如果我使用Python,我沒有這個問題。我用:

for line in file(file_name): 
    fld = line.split() 

它的作品完美。它不關心字段之間是否有2或3個空格。即使是空格和製表符的組合也不會導致任何問題。熊貓可以做同樣的事嗎?

回答

58

documentation,您可以使用正則表達式或delim_whitespace

>>> import pandas as pd 
>>> for line in open("whitespace.csv"): 
...  print repr(line) 
...  
'a\t b\tc 1 2\n' 
'd\t e\tf 3 4\n' 
>>> pd.read_csv("whitespace.csv", header=None, delimiter=r"\s+") 
    0 1 2 3 4 
0 a b c 1 2 
1 d e f 3 4 
>>> pd.read_csv("whitespace.csv", header=None, delim_whitespace=True) 
    0 1 2 3 4 
0 a b c 1 2 
1 d e f 3 4 
+1

你也可以使用'skipinitialspace'跳過初始空間 – jarondl 2014-12-04 14:28:00

5
>>> pd.read_csv("whitespace.csv", header = None, sep = "\s+|\t+|\s+\t+|\t+\s+") 

會使用任意數量的空格和製表符作爲分隔符的任意組合。

0

我們可能會考慮這樣做,以處理所有的組合,零次或多次發生。

pd.read_csv("whitespace.csv", header = None, sep = "[ \t]*,[ \t]*") 
0

熊貓有兩個CSV讀者,不僅是靈活的關於冗餘前導空格:

pd.read_csv("whitespace.csv", skipinitialspace=True) 

而一個不

pd.DataFrame.from_csv("whitespace.csv") 

也不是亂開箱靈活關於末尾的空格,請使用正則表達式查看答案。避免delim_whitespace,因爲它也允許空格(沒有或\ t)作爲分隔符。

相關問題