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

如何展开JSON数组元素并与DataFrame的ID列正确映射

解决DataFrame中JSON数组扁平化并保留id映射的问题

嘿,我来帮你搞定这个需求!要把每个id对应的JSON数组元素拆成单独行,同时保证和原id正确绑定,用pandas就能轻松实现,我给你一步步演示:

步骤1:准备环境与示例数据

首先确保你已经导入了pandas和json(如果你的name列是字符串格式的JSON数组,就需要用到json库)。先构造你给出的示例DataFrame:

import pandas as pd
import json

# 构造示例DataFrame
data = {
    'id': ['a1xy', 'a7yz', 'bx4y'],
    'name': [
        [{"event": "sports", "start": "100"}, {"event": "lunch", "start": "121"}],
        [{"event": "lunch", "start": "109"}, {"event": "movie", "start": "97"}],
        [{"event": "dinner", "start": "78"}, {"event": "sleep", "start": "25"}]
    ]
}
df = pd.DataFrame(data)

步骤2:处理字符串格式的JSON数组(如果需要)

如果你的name列实际是字符串形式的JSON数组(比如从CSV读取的),先把它转换成Python列表:

df['name'] = df['name'].apply(json.loads)

步骤3:扁平化JSON数组并保留id映射

用pandas.json_normalize方法,指定要展开的数组路径(record_path),同时保留id作为元数据列:

# 扁平化数组,保留id映射
flattened_df = pd.json_normalize(df.to_dict('records'), record_path='name', meta='id')

# 调整列顺序(可选,让id列在前)
flattened_df = flattened_df[['id', 'event', 'start']]

最终结果

运行后你会得到这样的扁平化DataFrame:

ideventstart
a1xysports100
a1xylunch121
a7yzlunch109
a7yzmovie97
bx4ydinner78
bx4ysleep25

这个方法的核心是json_normalize的record_path参数指定要展开的数组字段,meta参数指定需要保留的关联列,这样就能完美实现每个数组元素和原id的映射啦!

内容的提问来源于stack exchange,提问作者Symphony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:47:31