如何存储apply返回的DataFrame?及Excel路径DataFrame处理问题
关于pandas DataFrame的存储与批量Excel处理问题
1. 存储apply方法返回的DataFrame
当apply方法返回一个DataFrame时,你可以直接用pandas提供的各类输出方法来保存它,具体选哪种格式看你的后续需求:
保存为CSV文件(通用文本格式,适配大多数场景):
# 假设apply返回的结果是result_df result_df.to_csv('output.csv', index=False)加上
index=False能避免把DataFrame的索引列写入文件,让数据更整洁。保存为Excel文件(适合需要和Excel交互的场景):
result_df.to_excel('output.xlsx', sheet_name='Apply_Result', index=False)如果要写入多个工作表,还可以用
ExcelWriter来实现多表写入。保存为Parquet/Feather文件(大数据场景首选,压缩率高、读写速度快):
# 需先安装pyarrow或fastparquet库 result_df.to_parquet('output.parquet')保存为JSON文件(适合跨平台的结构化数据交互):
result_df.to_json('output.json', orient='records')
2. 处理包含id、Excel路径和工作表的DataFrame
从你给出的DataFrame结构来看,应该是想按id批量读取对应的Excel工作表并处理吧?这里给你一套完整的实现方案:
首先先确认你的DataFrame定义(Windows路径用原始字符串更稳妥):
import pandas as pd df = pd.DataFrame( [['00100', r'c:\one.xlsx', 'sheet1'], ['00100', r'c:\two.xlsx', 'sheet2'], ['05300', r'c:\thr.xlsx', 'sheet3'], ['95687', r'c:\fou.xlsx', 'sheet4'], ['05300', r'c:\fiv.xlsx', 'sheet5']], columns=['id', 'file', 'sheet'] )
步骤1:按id分组读取并合并Excel数据
用groupby+apply批量处理每个id对应的Excel文件:
def read_and_merge(group): # 读取当前id下所有Excel工作表 sheet_dfs = [] for _, row in group.iterrows(): excel_df = pd.read_excel(row['file'], sheet_name=row['sheet']) # 添加id列标记数据来源 excel_df['source_id'] = row['id'] sheet_dfs.append(excel_df) # 合并当前id下的所有工作表数据 return pd.concat(sheet_dfs, ignore_index=True) # 分组处理得到合并后的结果 merged_data = df.groupby('id').apply(read_and_merge)
步骤2:按id单独存储结果
如果需要把每个id的数据单独保存成文件,可以这样做:
for id_value, id_data in merged_data.groupby('source_id'): # 保存为CSV id_data.to_csv(f'{id_value}_merged_data.csv', index=False) # 或者保存为Excel id_data.to_excel(f'{id_value}_merged_data.xlsx', sheet_name=id_value, index=False)
这样每个id对应的数据都会生成单独的文件,方便后续按id查看或处理。
内容的提问来源于stack exchange,提问作者Caranarq Aramat
相关产品推荐
相关产品推荐

