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

Python使用pandas的df.to_excel导出仅一行,仅保留最后一个Excel数据

问题排查与修正

错误原因

  • 最核心问题:all_data = pd.DataFrame() 放在了for循环内部,每次循环都会清空之前已经存入的所有数据,最终只会保留最后一次循环的结果
  • 语法&拼写错误:
    1. for循环缺少闭合右括号,路径变量没有加引号包裹,属于基础语法错误
    2. 读取Excel的引擎参数拼写错误,正确为openpyxl,原代码写为openyxl
    3. append方法的参数拼写错误,正确为ignore_index,原代码写为igonre_index
    4. 两次insert操作使用了相同的列名aiueo,会导致列名重复
  • 逻辑错误:用zip(os.listdir(directory), glob.glob(root/hoge2))匹配文件名和文件路径的方式不可靠,两个路径如果不一致会出现匹配错位,而且glob参数没有加通配符,无法匹配到目标文件

修正后的代码

import pandas as pd
import glob
import os 

# 路径请自行替换为实际的目标Excel文件所在目录,通配符*.xlsx用于匹配所有Excel文件
file_list = glob.glob("root/hoge2/*.xlsx")
all_data = pd.DataFrame() # 初始化放在循环外部,避免每次清空数据

for f_path in file_list:
    filename = os.path.basename(f_path)
    # 过滤符合条件的文件
    if filename.endswith(".xlsx") and "abc" not in filename:
        # 读取指定列
        df = pd.read_excel(f_path, engine="openpyxl", usecols=[4], skiprows=1)
        df = df.fillna("")
        data = df.T

        # 从文件名提取信息
        filename_pref = [filename[:2]]
        filename_mun = [filename[3:6]] # 直接切片更简洁,避免冗余操作

        # 插入列,注意列名不要重复
        data.insert(0, "aiueo_pref", filename_pref)
        data.insert(0, "aiueo_mun", filename_mun)
   
        # pandas新版本已弃用append,推荐使用concat完成拼接
        all_data = pd.concat([all_data, data], ignore_index=True)

all_data.to_excel("output.xlsx", sheet_name='sheet_name_1', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:36:03