【问题标题】:pandas returning the unnamed columns熊猫返回未命名的列
【发布时间】:2017-11-27 19:28:54
【问题描述】:

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

【问题讨论】:

  • df1tDataFrame 吗?
  • excel的其他单元格中似乎有一些空格。
  • 是的,代码如下:df1t = pd.read_excel("/Users/mz/Desktop/ef_rated_1.xlsx")

标签: python pandas


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    如果需要带有过滤的列名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')
    

    对于按列返回所有列,请使用:

    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
    

    如有必要,删除所有 NaNs 行:

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

    【讨论】:

    • 谢谢。我将合并两个具有相同列名的 Excel 工作表。因此,对于具有“未命名”列的工作表,我需要先删除“未命名”列。我应该将代码更改为 cols = [col for col in df if col.startswith('Unnamed:')] 然后删除它吗?
    • 我认为 drop 没有必要,而是只选择未命名的列,如 cols = [col for col in df if col.startswith('Unnamed:')] 然后 pd.merge(df1, df2[cols])
    • 很高兴能帮到你!
    • 你能回答这个问题吗:stackoverflow.com/questions/44741136/…
    猜你喜欢
    • 2014-11-23
    • 2021-08-15
    • 2022-07-19
    • 2017-01-26
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多