将多JSON文件含对应文件名导入DataFrame时文件名重复问题排查
问题分析与修正
错误原因
- 循环中执行
df['filename'] = os.path.basename(ele).strip(".json")时,会把整个DataFrame的所有行的filename字段替换成当前遍历到的文件名。循环结束后,所有行自然都会显示最后一个文件的名称。 enumerate(json_files, len(json_files))属于误用,enumerate的第二个参数是起始索引值,这里你不需要用到索引,直接遍历文件路径列表即可。
修正后的代码
import glob import os import pandas as pd json_files = glob.glob(r"json_files\*.json") df = pd.DataFrame() for ele in json_files: # 读取单个JSON文件为子DataFrame sub_df = pd.read_json(ele) # 仅给当前文件对应的子DataFrame添加文件名 sub_df['filename'] = os.path.basename(ele).strip(".json") # 删除不需要的列 sub_df = sub_df.drop(['pages'], axis=1) # 合并子DataFrame到主DataFrame,重置索引避免重复 df = pd.concat([df, sub_df], ignore_index=True)
关键改进点
- 先给单个文件对应的子DataFrame添加filename字段,再合并到主DataFrame,避免覆盖已有数据的filename值
- 添加
ignore_index=True重置索引,避免合并后出现重复索引问题 - 移除了无用的enumerate遍历方式
内容的提问来源于stack exchange,提问作者Blob
相关产品推荐
相关产品推荐

