You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:01:07