Python使用pandas的df.to_excel导出仅一行,仅保留最后一个Excel数据
问题排查与修正
错误原因
- 最核心问题:
all_data = pd.DataFrame()放在了for循环内部,每次循环都会清空之前已经存入的所有数据,最终只会保留最后一次循环的结果 - 语法&拼写错误:
- for循环缺少闭合右括号,路径变量没有加引号包裹,属于基础语法错误
- 读取Excel的引擎参数拼写错误,正确为
openpyxl,原代码写为openyxl - append方法的参数拼写错误,正确为
ignore_index,原代码写为igonre_index - 两次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
相关产品推荐
相关产品推荐

