拼接Excel工作表后DataFrame出现Unnamed列,该如何删除或重命名?
Unnamed列产生原因
该类列本质是Excel源文件存在无表头的有效数据列,或是读取时未正确指定索引列,导致pandas为无表头列自动生成了Unnamed:xx格式的默认列名。
最优处理方案
方案1:读入阶段直接过滤(最推荐)
无需后续二次处理,直接在pd.read_excel阶段指定过滤规则,修改你代码中的读取逻辑即可:
# 替换原有读取代码 listing = pd.read_excel( 'amex-listing.xlsx', sheet_name=exchange, na_values='NaN', index_col=False, # 新增该行,直接过滤无表头的列 usecols=lambda x: 'Unnamed' not in x )
如果是Excel第一列是索引导致的Unnamed列,也可以直接指定index_col=0将第一列设为索引,即可避免生成无名列。
方案2:读入后批量删除
如果已经完成合并,可以直接批量删除所有带Unnamed标识的列:
# 合并完成后执行 listings = listings.loc[:, ~listings.columns.str.contains('^Unnamed')]
也可以按列名精确删除指定无名列:
listings = listings.drop('Unnamed: 0', axis=1)
方案3:保留列时的重命名方法
如果需要保留该列,可通过以下两种方式重命名:
- 批量重命名所有无名列
# 依次将无名列重命名为custom_col_1、custom_col_2,可自行修改前缀 unnamed_cols = listings.columns[listings.columns.str.contains('^Unnamed')] rename_map = {col: f'custom_col_{i+1}' for i, col in enumerate(unnamed_cols)} listings = listings.rename(columns=rename_map)
- 单独重命名指定无名列
listings = listings.rename(columns={'Unnamed: 0': '自定义列名'})
优化后完整代码参考
你原有代码中的sup_df属于冗余逻辑,可直接删除,优化后完整代码如下:
import pandas as pd xls = pd.ExcelFile('amex-listing.xlsx') exchanges = xls.sheet_names pd.options.display.width = 10000 final_file = 'listing.xlsx' listings = [] for exchange in exchanges: listing = pd.read_excel( 'amex-listing.xlsx', sheet_name=exchange, na_values='NaN', index_col=False, usecols=lambda x: 'Unnamed' not in x ) listing['exchange'] = exchange listings.append(listing) # 新增ignore_index=True参数可省略单独reset_index的步骤 listings = pd.concat(listings, ignore_index=True) print(listings)
内容的提问来源于stack exchange,提问作者starlord
相关产品推荐
相关产品推荐

