如何自动化读取无规则JSON文件至不同Pandas DataFrame?
实现JSON文件自动转为对应Pandas DataFrame的方案
完全可行!针对你这种文件名和内容无规律的情况,我给你两种实用的方法,按需选择就行:
方法一:自动生成独立的DataFrame变量(比如df_fruit、df_clothes)
这种方法会直接帮你创建和文件名对应的全局变量,完全符合你想要的效果。步骤如下:
首先导入需要的库:
import os import json import pandas as pd
然后设置你的JSON文件夹路径,替换成你实际的路径:
json_dir = "./your_json_files" # 改成你的JSON文件所在文件夹
核心代码:
for file_name in os.listdir(json_dir): # 只处理JSON文件 if file_name.endswith(".json"): # 提取文件名里的标识(比如从f_fruit.json里拿到fruit) # 这里可以根据你的实际文件名格式调整,比如如果文件名是fruit.json,就改成file_name.split('.')[0] df_identifier = file_name.split('.')[0].split('_')[-1] # 生成DataFrame的变量名,比如df_fruit df_var_name = f"df_{df_identifier}" # 读取JSON文件 file_path = os.path.join(json_dir, file_name) with open(file_path, 'r', encoding='utf-8') as f: json_data = json.load(f) # 转换成DataFrame,这里注意:如果你的JSON里的目标数据键和df_identifier一致(比如f_fruit.json里的键是fruit),就用下面的代码 # 如果键不一致,你可以先打印json_data.keys()看看结构再调整 target_df = pd.DataFrame(json_data[df_identifier]) # 动态创建全局变量 globals()[df_var_name] = target_df
运行完之后,你就可以直接用df_fruit、df_clothes这些变量了。
方法二:用字典统一存储所有DataFrame(更推荐)
如果你的JSON文件比较多,用独立变量可能会导致命名混乱,这种情况下用字典存储会更整洁,管理起来也方便:
import os import json import pandas as pd json_dir = "./your_json_files" df_collection = {} for file_name in os.listdir(json_dir): if file_name.endswith(".json"): df_identifier = file_name.split('.')[0].split('_')[-1] file_path = os.path.join(json_dir, file_name) with open(file_path, 'r', encoding='utf-8') as f: json_data = json.load(f) df_collection[df_identifier] = pd.DataFrame(json_data[df_identifier]) # 调用的时候直接用df_collection['fruit']、df_collection['clothes']就行
注意事项
- 如果某个JSON文件的结构和你原来的不一样(比如数据不是嵌套在和文件名对应的键里),你可以先跑下面的代码查看每个文件的结构:
for file_name in os.listdir(json_dir): if file_name.endswith(".json"): file_path = os.path.join(json_dir, file_name) with open(file_path, 'r', encoding='utf-8') as f: json_data = json.load(f) print(f"文件{file_name}的顶层键:{list(json_data.keys())}")
根据输出调整pd.DataFrame()里的参数就行,比如如果是直接的列表数据,就改成pd.DataFrame(json_data)。
内容的提问来源于stack exchange,提问作者Thabra
相关产品推荐
相关产品推荐

