如何从Pandas中迭代创建的DataFrame导出JSON文件
解决方案:按列值拆分DataFrame并导出到指定文件夹的JSON文件
别用exec()这种不安全的方式了,动态创建变量容易污染命名空间,调试起来也麻烦。直接用字典存储每个分组的DataFrame,既能清晰管理数据,又能顺利完成导出需求。
以下是完整实现代码:
from datetime import datetime import pandas as pd import os # 准备原始数据 data1 = ['a', 'a', 'a','b','b','b','c','c','c'] data2 = [1,2,3,4,5,6,7,8,9] data3 = [10,11,12,13,14,15,16,17,18] data = { 'Name': data1, 'data2': data2, 'data3': data3 } df = pd.DataFrame(data) # 1. 按Name列分组,把每个组的DataFrame存入字典 grouped_dfs = {name: group for name, group in df.groupby('Name')} # 2. 生成当前日期的文件名格式(比如2024-05-20.json) current_date = datetime.now().strftime("%Y-%m-%d") filename = f"{current_date}.json" # 3. 遍历字典,导出每个DataFrame到对应文件夹 for name, sub_df in grouped_dfs.items(): # 创建以Name值命名的文件夹(如果不存在) folder_path = f"./{name}" os.makedirs(folder_path, exist_ok=True) # 拼接完整文件路径 file_path = f"{folder_path}/{filename}" # 导出为JSON文件(可按需调整orient参数,比如'records'适合按行导出) sub_df.to_json(file_path, orient='records', indent=4)
关键步骤说明:
- 用字典存储分组DataFrame:通过
df.groupby('Name')直接按列值分组,用字典推导式把每个组的名称和对应DataFrame存起来,比exec()安全且易维护。 - 自动创建文件夹:
os.makedirs(..., exist_ok=True)会自动生成目标文件夹,即使文件夹已存在也不会报错。 - 规范日期文件名:
datetime.now().strftime("%Y-%m-%d")生成标准日期字符串,保证文件名统一有序。 - JSON导出配置:
orient='records'将每行数据转为独立JSON对象,indent=4让JSON文件更易读,你可以根据需求调整orient参数(比如'columns'、'index'等)。
如果非要用你原来的exec()方式(不推荐),也可以在循环里直接追加导出逻辑,但还是强烈建议用字典的实现方式,代码更清晰可靠。
内容的提问来源于stack exchange,提问作者Guilherme Theis
相关产品推荐
相关产品推荐

