2017-06-24 89 views
1

以下是我在Excel表格中的數據示例。熊貓返回未命名的列

A B C 
1 2 3 
4 5 6 

我嘗試使用下面的代碼來獲取列名:

p1 = list(df1t.columns.values) 

輸出是這樣

[A, B, C, 'Unnamed: 3', 'unnamed 4', 'unnamed 5', .....] 

我檢查Excel工作表中,只有三列命名爲A,B和C.其他列爲空白。任何建議?

+0

是'df1t'一個'DataFrame'? – danche

+1

似乎excel中的另一個單元格中有一些空格。 – jezrael

+0

是的,這個代碼:df1t = pd.read_excel(「/ Users/mz/Desktop/ef_rated_1.xlsx」) – Mary

回答

0

有問題的一些單元格不是空的,但包含一些空格。

如果用過濾Unnamed需要列名:

cols = [col for col in df if not col.startswith('Unnamed:')] 
print (cols) 
['A', 'B', 'C'] 

樣品與file

df = pd.read_excel('https://dl.dropboxusercontent.com/u/84444599/file_unnamed_cols.xlsx') 
print (df) 
    A B C Unnamed: 3 Unnamed: 4 Unnamed: 5 Unnamed: 6 Unnamed: 7 
0 4.0 6.0 8.0  NaN  NaN  NaN  NaN  NaN 
1 NaN NaN NaN     NaN  NaN  NaN  NaN 
2 NaN NaN NaN  NaN     NaN  NaN   
3 NaN NaN NaN  NaN  NaN        NaN 

cols = [col for col in df if not col.startswith('Unnamed:')] 
print (cols) 
['A', 'B', 'C'] 

另一種解決方案:

cols = df.columns[~df.columns.str.startswith('Unnamed:')] 
print (cols) 
Index(['A', 'B', 'C'], dtype='object') 

而對於回報通過的cols所有列使用:

print (df[cols]) 
    A B C 
0 4.0 6.0 8.0 
1 NaN NaN NaN 
2 NaN NaN NaN 
3 NaN NaN NaN 

,如有必要去除所有NaN s行:

print (df[cols].dropna(how='all')) 
    A B C 
0 4.0 6.0 8.0 
+0

謝謝。我將合併兩個具有相同列名的Excel表。因此,對於具有「未命名」列的表單,我需要首先刪除「未命名」列。如果col.startswith('Unnamed:')]將代碼更改爲cols = [col for df col,然後刪除它? – Mary

+0

我認爲drop是沒有必要的,而只選擇不是未命名的列,如'cols = [col for df if col.startswith('Unnamed:')]'然後是'pd.merge(df1,df2 [cols]) ' – jezrael

+0

非常感謝你 – Mary