如何基于pandas dataframe生成指定目录结构并存储用户分组CSV文件
解决方案
核心思路
- 优先使用
os.makedirs实现多级目录批量创建,无需逐层手动生成目录,配置exist_ok=True参数避免重复创建报错 - 分组导出时直接按照目标结构拼接路径,无需提前单独创建所有用户文件夹,减少冗余代码
完整代码示例
import pandas as pd import os # 构造示例DataFrame d = {'user': ['Peter', 'Peter', 'Peter', 'Peter', 'David', 'David', 'David', 'Emma', 'Joyce', 'Joyce', 'Joyce'], 'date': ['2019-03-04', '2019-03-04', '2019-03-04', '2019-03-04', '2019-03-04', '2019-03-04', '2019-03-04', '2019-03-04', '2019-03-04', '2019-03-04', '2019-03-04'], 'value': ['5', '4', '3', '3', '6', '1', '5', '7', '1', '7', '6']} df = pd.DataFrame(data=d) # 定义根报告目录,可按需修改为实际路径 root_path = "./Report" # 取当前数据对应的日期(单日期场景直接取第一条即可) current_date = df["date"].iloc[0] # 按用户分组导出 for user_name, user_data in df.groupby("user"): # 拼接对应用户的目标目录 target_dir = os.path.join(root_path, "Reports per date", current_date, "Users", user_name) # 自动创建多级目录,目录已存在也不会报错 os.makedirs(target_dir, exist_ok=True) # 拼接csv文件路径并导出 csv_file_path = os.path.join(target_dir, f"{user_name}.csv") user_data.to_csv(csv_file_path, index=False)
多日期场景适配
如果你的DataFrame包含多个日期的数据,只需要在外层增加一层按日期的分组即可:
for date_val, date_df in df.groupby("date"): for user_name, user_data in date_df.groupby("user"): target_dir = os.path.join(root_path, "Reports per date", date_val, "Users", user_name) os.makedirs(target_dir, exist_ok=True) user_data.to_csv(os.path.join(target_dir, f"{user_name}.csv"), index=False)
内容的提问来源于stack exchange,提问作者sampeterson
相关产品推荐
相关产品推荐

