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

Pandas拼接多个Dataframe时文件名索引丢失问题求助

pandas拼接多DataFrame丢失文件名索引的解决方案

原有代码核心问题

  • 循环逻辑冗余:单文件处理时重复遍历全目录拼接当前文件的DataFrame,会生成无效重复数据
  • IO参数使用错误:to_csv、to_excel的index参数为布尔类型,仅控制是否导出索引,传入文件名字符串属于无效传参,不会达到将文件名设为索引名的效果
  • 索引传递逻辑不可靠:通过concat的keys参数生成的多级索引存入csv后,再次读取时默认会被识别为普通数据列,后续仅取System_Library_Name字段时会直接丢弃文件名相关的索引列,导致信息丢失

优化后代码(无需中间生成多份临时csv)

import os
import pandas as pd

directory = "替换为你的目标目录路径"
processed_df_list = []

for filename in os.listdir(directory):
    if not filename.endswith("log.csv"):
        continue
    # 读取单文件指定行
    df = pd.read_fwf(filename, skiprows=186, nrows=1, names=["Attribute"])
    # 提取目标字段
    df['System_Library_Name'] = df['Attribute'].str.split('/').str[6]
    # 直接将文件名存为普通列,比依赖索引传递信息更稳妥
    df['source_filename'] = filename
    processed_df_list.append(df)

# 批量拼接所有处理好的DataFrame
all_log = pd.concat(processed_df_list, ignore_index=True)
# 按需保留字段,如果需要将文件名设为索引,直接调用set_index即可
result = all_log[['source_filename', 'System_Library_Name']].set_index('source_filename')
# 导出excel时保留索引即可保留文件名信息
result.to_excel("log.xlsx", index=True)

若需保留原中间存csv的逻辑,修改要点

  • 单文件导出csv时,直接把文件名存为普通列,不要用多级索引传递
  • 读取csv拼接时,不要仅筛选System_Library_Name字段,需保留文件名列后再按需设为索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:05