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

读取多个Excel文件存入pandas DataFrame并保留文件名作为列求助

问题原因
  • 你现有代码的逻辑是先把新Excel的数据追加到总DataFrame,再给整个总DataFrame的Month列统一赋值,这会导致每次循环都会覆盖之前所有行的Month值,最终所有行的Month都等于最后一个符合条件的Excel文件名。
修正方案

推荐使用第一种实现方式,性能更优、逻辑更清晰:

方式1:先给单文件DataFrame加文件名列,再合并总表

import os
import pandas as pd

paths = "C://Users//6J2754897//Downloads//monthlydata"
files = os.listdir(paths)

# 用列表暂存所有单表数据,避免循环append的性能损耗
df_list = []
for file_name in files:
    if file_name.endswith('.xlsx'):
        # 读取单个Excel文件
        single_df = pd.read_excel(os.path.join(paths, file_name), 
                                  sheet_name="information", 
                                  skiprows=7)
        # 仅给当前单表的所有行标记对应文件名
        single_df['Month'] = file_name
        df_list.append(single_df)

# 最后一次性合并所有表
df = pd.concat(df_list, ignore_index=True)

方式2:最小改动适配原有写法

如果不想大幅调整原有代码逻辑,仅调整赋值和追加的顺序即可:

import os
import pandas as pd

files = os.listdir("C://Users//6J2754897//Downloads//monthlydata")
paths = "C://Users//6J2754897//Downloads//monthlydata"

df = pd.DataFrame()
for file in range(len(files)):
   if files[file].endswith('.xlsx'):
      current_file = files[file]
      # 先给当前读取的单表加文件名列,再追加到总表
      temp_df = pd.read_excel(paths + "//" + current_file, sheet_name = "information", skiprows=7)
      temp_df['Month'] = str(current_file)
      df = df.append(temp_df, ignore_index=True)
额外优化提示
  • 用os.path.join()拼接路径可以避免不同操作系统路径分隔符不兼容的问题
  • 原有代码中未使用的a = pd.DataFrame([2], index = None)和import fsspec可以按需删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:04