如何展开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:
| id | event | start |
|---|---|---|
| a1xy | sports | 100 |
| a1xy | lunch | 121 |
| a7yz | lunch | 109 |
| a7yz | movie | 97 |
| bx4y | dinner | 78 |
| bx4y | sleep | 25 |
这个方法的核心是json_normalize的record_path参数指定要展开的数组字段,meta参数指定需要保留的关联列,这样就能完美实现每个数组元素和原id的映射啦!
内容的提问来源于stack exchange,提问作者Symphony
相关产品推荐
相关产品推荐

