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

Python遍历同结构多Excel文件提取数据的代码问题咨询

问题解答与代码修正

第一个问题:能否输出到不存在的文件并自动创建?

可以。pandas的to_excel方法会自动创建指定路径下不存在的文件,只要你拥有该路径的写入权限,注意要把文件名以字符串形式传入(比如"final_merged.xlsx")。

代码问题修正与核心逻辑优化

你的代码存在多个语法错误和逻辑问题,尤其是concat的用法完全不对,无法实现堆叠合并的需求。以下是修正后的完整代码,同时优化了路径处理等细节:

import os
import pandas as pd

# 使用原始字符串避免转义问题,末尾保留路径分隔符
path = r"C:\Users\Adam\Desktop\Stock Trackers\"

finalDf = pd.DataFrame()
# 遍历目录下的所有文件,同时过滤出.xlsx文件
for file in os.listdir(path):
    if file.endswith(".xlsx"):
        # 用os.path.join拼接路径,避免跨平台问题和字符串拼接错误
        file_path = os.path.join(path, file)
        # 读取指定工作表和列
        df = pd.read_excel(file_path, sheet_name="Main", usecols="A:D,R")
        # 删除全为空的行,如果要删除包含任何NaN的行,把how='all'改成how='any'
        df = df.dropna(how='all')
        
        # 列重命名与计算衍生列
        df['Qty Received'] = df['Total Received']
        df = df.drop('Total Received', axis=1)
        df['InvoicedValue'] = df['Price'] * df['Qty Invoiced']
        df['ReceivedValue'] = df['Price'] * df['Qty Received']
        df['DeltaQty'] = df['Qty Received'] - df['Qty Invoiced']
        df['DeltaValue'] = df['ReceivedValue'] - df['InvoicedValue']
        
        # 添加文件名列,用于区分数据来源
        df.insert(loc=0, column='filename', value=file)
        
        # 关键:每次循环将当前df合并到finalDf中,实现堆叠
        finalDf = pd.concat([finalDf, df], ignore_index=True)

# 输出到新文件,自动创建不存在的文件
finalDf.to_excel("final_merged.xlsx", index=False)

关键修改说明

  • 路径处理:用原始字符串r""定义路径,避免转义错误;用os.path.join拼接文件路径,更可靠。
  • 循环判断:把错误的excel_files.endswith改成file.endswith,匹配当前遍历的文件。
  • concat逻辑:原代码pd.concat([df])每次都只保留当前文件的DataFrame,修正为pd.concat([finalDf, df], ignore_index=True),实现逐次累加合并,ignore_index=True重置索引避免重复。
  • 文件名变量:把未定义的filename改成当前遍历的file,正确添加数据来源标识。
  • 输出文件:把未定义的finalfile.xlsx改成字符串形式的文件名,同时添加index=False避免输出多余的索引列。
  • 空行处理:如果dropna(how='all')没效果,说明你的空行不是全列空值,若要删除任何包含NaN的行,可改为df.dropna(how='any')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:40:39