2016-10-26 92 views
2

我想讀取使用熊貓csv文件的數量的內容,並加載它在一個熊貓數據框。解析包含頭只使用Python,大熊貓csv文件

所有的csv文件由標題(第1行)組成,它定義了列名稱,然後是數字數據。我只想讀取數字數據,因此我使用選項skiprows = [0]。

例如:

path = 'mypath' 
file = 'example1.csv' 

在我的example1.csv是一樣的東西:

time varA varB 
1.0 2.3 3.2 
2.0 4.2 3.4 
... ... ... 

然後我使用這段代碼:

array_list = [] 

for file in os.listdir(path): 
    df = pd.read_csv(file, skiprows=[0], header=None) 
    array_list.append(df.as_matrix()) 

這工作,直到我得到一個文件,其中只包含頭文件(只有一個原始文件),沒有數據,如下面的示例example2.cvs:

time varA varB 

,我得到的錯誤

EmptyDataError: No columns to parse from file 

如何引入文件除外,它包括僅僅只有頭,這並不意味着它是空的任何建議?

非常感謝你的幫助,

MarcoC

+1

嘗試header ='infer' – Sam

+0

謝謝@Sam! – MarcoC

回答

0

有關使用try..except如何?

array_list = [] 

for file in os.listdir(path): 
    try: 
     df = pd.read_csv(file, skiprows=[0], header=None) 
     array_list.append(df.as_matrix()) 
    except EmptyDataError: 
     # empty file, skip 
     continue 

這有缺點len(array_list) != len(os.listdir(path))。如果你真的想空的數據幀,以避免這種情況,使用header='infer',像@sam建議:

array_list = [] 

for file in os.listdir(path): 
    df = pd.read_csv(file, header='infer') 
    array_list.append(df.as_matrix()) 

對於文件與內容

time varA varB 

返回

Empty DataFrame 
Columns: [time varA varB] 
Index: [] 
+0

謝謝@Graipher。我必須用'array_list'的內容填充一個空的數據框。在for循環中,我用'array_list.append(df)'替換了'array_list.append(df.as_matrix())'。使用選項'as_matrix()'我收到錯誤「TypeError:無法連接非NDFrame對象」。然後,在循環之外,我添加了'frame = pd.concat(array_list,ignore_index = True)'。再次感謝你。 – MarcoC

0

票頭= 'infer'or header = 0 should do the trick。

+0

謝謝@ user2539738。這也適用。 – MarcoC