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
相关产品推荐
相关产品推荐

