批量加载文件夹中Pickle文件并合并为单个Pandas DataFrame
批量加载并合并Pickle文件为单个Pandas DataFrame
没问题,我帮你把单文件处理的逻辑扩展成了批量处理的代码,能自动加载ethnicity_files文件夹下所有imdbnames0.pkl到imdbnames40.pkl的文件,最后合并成一个完整的DataFrame。
完整批量处理代码
import pickle import pandas as pd from glob import glob # 匹配所有目标pickle文件(自动覆盖0到40的编号) file_pattern = "ethnicity_files/imdbnames*.pkl" all_files = glob(file_pattern) # 初始化列表,存储每个文件处理后的DataFrame片段 df_fragments = [] for file_path in all_files: # 安全加载pickle文件(用with语句自动管理文件句柄) with open(file_path, 'rb') as fh: data_dict = pickle.load(fh) # 完全复用你验证过的单文件处理逻辑 processed_df = pd.concat({k: pd.json_normalize(v, 'scores', ['best']) for k, v in data_dict.items()}) processed_df = processed_df.reset_index(level=1, drop=True).rename_axis('names').reset_index() # 将当前文件的结果加入列表 df_fragments.append(processed_df) # 合并所有片段为最终的完整DataFrame final_merged_df = pd.concat(df_fragments, ignore_index=True) # 查看合并后的结果 final_merged_df.head()
关键步骤说明
- 自动匹配文件:用
glob()函数匹配所有符合imdbnames*.pkl规则的文件,不用手动逐个输入文件名,避免遗漏或编号错误。 - 安全文件操作:用
with语句打开文件,会自动关闭文件句柄,避免资源泄漏问题。 - 保留原有逻辑:完全沿用你已经验证过的单文件处理流程,确保每个文件的输出格式和你预期的一致。
- 合并优化:先把每个文件的处理结果存入列表,最后一次性合并,比边循环边合并更高效,尤其适合大量文件的场景。
处理后的数据格式示例
names ethnicity score best 0 !Gubi Tietie Asian 0.03 GreaterEuropean 1 !Gubi Tietie GreaterAfrican 0.01 GreaterEuropean 2 !Gubi Tietie GreaterEuropean 0.96 GreaterEuropean 3 !Gubi Tietie British 0.17 WestEuropean 4 !Gubi Tietie Jewish 0.13 WestEuropean ...
内容的提问来源于stack exchange,提问作者Shivam
相关产品推荐
相关产品推荐

