pandas返回未命名的列

时间:2017-06-24 08:47:17

标签: python pandas

以下是我在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.其他列是空白的。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

有问题,有些单元格不是空的,但包含一些空格。

如果需要带有过滤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行:

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

答案 1 :(得分:0)

无论如何,任何人都会遇到这个问题:如果 Excel 工作表包含用背景颜色格式化的空单元格,也会出现此问题:

Screenshot of Excel File

import pandas as pd
df1t = pd.read_excel('test.xlsx')
print(df1t)
   A  B  C  Unnamed: 3
0  1  2  3         NaN
1  4  5  6         NaN

一种选择是删除“未命名”列,如下所述:
https://stackoverflow.com/a/44272830/11826257

df1t = df1t[df1t.columns.drop(list(df1t.filter(regex='Unnamed:')))]
print(df1t)
   A  B  C
0  1  2  3
1  4  5  6