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

合并多个Excel到Pandas DataFrame时源文件列赋值错误,求排查

合并Excel文件时Source_file列全部显示最后一个文件名的问题解决

我来帮你捋捋这个问题~你当前代码里的问题出在循环中的这两行逻辑:

df['Source_file'] = f
df = df.append(data)

每次循环你都是先给整个总DataFrame的Source_file列赋值为当前文件名f,再把新读取的数据追加进去。这就导致:第一次循环时,空的总df被加上了全是第一个文件名的Source_file列,然后追加数据;第二次循环时,你又把总df里所有行的Source_file改成了第二个文件名(包括第一次追加的那些行),再追加新数据……循环到最后,所有行的Source_file自然都变成最后一个文件的名字了。

正确的思路应该是:给当前读取的单文件数据添加Source_file列,再把这个带标记的数据追加到总df里,而不是去修改总df的列。修正后的代码如下:

import pandas as pd
import os

# 获取当前路径下的所有xlsx文件
path = os.getcwd()
files_xlsx = [f for f in os.listdir(path) if f.endswith('xlsx')]

# 创建空的总DataFrame
df = pd.DataFrame()

# 循环读取每个文件并合并
for f in files_xlsx:
    # 读取当前文件的数据
    data = pd.read_excel(f, 'Sheet 1')
    # 给当前单文件数据添加源文件名列,值为当前文件名
    data['Source_file'] = f
    # 将带标记的数据追加到总DataFrame,ignore_index避免索引重复
    df = df.append(data, ignore_index=True)

另外还有两个小优化点:

  • 用f.endswith('xlsx')比f[-4:] == 'xlsx'更稳妥,能避免误判.xlsm这类类似后缀的文件
  • 追加时加上ignore_index=True,可以防止合并后出现重复索引的问题

如果你用的是pandas 1.4.0及以上版本,append()方法已经被标记为过时,更推荐用pd.concat()来合并,代码可以改成这样:

import pandas as pd
import os

path = os.getcwd()
files_xlsx = [f for f in os.listdir(path) if f.endswith('xlsx')]

# 先收集所有带标记的单文件DataFrame
dfs_list = []
for f in files_xlsx:
    data = pd.read_excel(f, 'Sheet 1')
    data['Source_file'] = f
    dfs_list.append(data)

# 一次性合并所有DataFrame
df = pd.concat(dfs_list, ignore_index=True)

这种写法不仅更高效,也更贴合pandas的最新规范~

内容的提问来源于stack exchange,提问作者scotton16

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:32:51