如何将DataFrame拆分列并动态命名,高效转换为指定JSON格式
拆分字符串、重命名列、生成指定JSON及高效处理方案
1. 拆分字符串并重命名为对应列名
针对原数据中split列的A=1;B=2;C=3格式内容,我们可以通过向量化操作拆分并重塑结构,生成以A、B、C等为列名的DataFrame,同时保留region列关联关系。
实现代码
import pandas as pd # 原数据 df = pd.DataFrame( data=[ ("REG1","A=1;B=2;C=3"), ("REG2","D=1;E=2;F=3"), ], columns=["region","split"] ) # 向量化拆分+重塑,避免逐行循环 temp_df = df.assign(split=df['split'].str.split(';')).explode('split') temp_df[['key', 'value']] = temp_df['split'].str.split('=', expand=True) # 透视得到最终结构的DataFrame final_df = temp_df.pivot(index='region', columns='key', values='value').reset_index() final_df.columns.name = None # 移除列索引的名称 print(final_df)
输出结果
region A B C D E F 0 REG1 1 2 3 NaN NaN NaN 1 REG2 NaN NaN NaN 1 2 3
2. 转换为指定格式的JSON
要求生成的JSON中,每个对象的record字段用*分隔DataFrame的所有列值(空值替换为空字符串)。
实现代码
# 将所有列转为字符串,空值替换为空 str_data = final_df.astype(str).replace('nan', '') # 向量化拼接生成record字段 final_df['record'] = str_data.agg('*'.join, axis=1) # 仅保留record列并转为JSON result_json = final_df[['record']].to_json(orient='records', indent=2) print(result_json)
输出JSON
[ { "record": "REG1*1*2*3***" }, { "record": "REG2***1*2*3" } ]
3. 数千条记录的高效处理方法
处理数千条数据的核心是避免逐行循环,用Pandas原生向量化操作替代,关键优化点:
- 拆分字符串时,用
str.split+explode+pivot的向量化组合,比itertuples/iterrows这类逐行循环效率高数倍; - 生成
record字段时,用agg('*'.join, axis=1)的向量化拼接,替代apply逐行处理; - 若后续数据量增长到十万级以上,可考虑用Dask Pandas做并行处理,但数千条数据用原生Pandas完全足够,无需额外工具。
内容的提问来源于stack exchange,提问作者anuof90
相关产品推荐
相关产品推荐

