You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拼接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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 20:21:03