Pandas批量读取Excel拆分文件名新增列值全为最后文件值问题求解
问题修复方案
错误原因
你在循环中每次完成文件数据追加后,直接对完整的总df的新增列做统一赋值,该操作会覆盖所有已存在行的对应列值,因此循环结束后所有行的新增列取值都会和最后一个文件的拆分结果一致。
修复后代码
import glob import os import pandas as pd path = "C:/Users/User/blabla" all_files = glob.glob(os.path.join(path, "*.xlsx")) df_list = [] for f in all_files: # 读取单文件数据 data = pd.read_excel(f) # 拆分当前文件名得到对应字段 file_name = os.path.splitext(os.path.basename(f))[0] nameList = file_name.rsplit('_') # 仅给当前单文件的数据新增对应列 data['Platform'] = nameList[1] data['First label']= nameList[2] data['Session'] = nameList[3] data['Language'] = nameList[4] data['Version'] = nameList[5] df_list.append(data) # 一次性合并所有处理好的单文件数据,自动忽略旧索引 df = pd.concat(df_list, ignore_index=True) df
优化说明
用列表暂存所有处理完成的单文件数据,最后一次性合并的方案,比循环中反复追加到总DataFrame的执行效率高很多,文件数量较多时性能差异会更明显。
内容的提问来源于stack exchange,提问作者Berk U.
相关产品推荐
相关产品推荐

