2017-06-24 91 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