如何在pandas DataFrame中展平JSON数组元素?附示例
展平DataFrame中的JSON数组列
嘿,这事儿好办!我帮你把这个嵌套的JSON数组展平成结构化的结果,分两种常见情况来处理:
情况1:name列已经是Python列表(内含字典)
如果你的DataFrame里name列已经是解析后的Python列表(就像你给出的示例那样),可以用explode先把列表拆成每行一个字典,再用json_normalize把字典展开成独立列:
第一步:构建示例DataFrame
import pandas as pd 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)
第二步:展平数组并结构化
# 把列表拆成每行一个字典 df_exploded = df.explode("name", ignore_index=True) # 把字典展开成列,和原id列拼接 result = pd.concat([df_exploded["id"], pd.json_normalize(df_exploded["name"])], axis=1)
最终结果
| id | event | start |
|---|---|---|
| a1xy | sports | 100 |
| a1xy | lunch | 121 |
| a7yz | lunch | 109 |
| a7yz | movie | 97 |
| bx4y | dinner | 78 |
| bx4y | sleep | 25 |
情况2:name列是未解析的JSON字符串
如果你的name列是原始的JSON字符串(比如从CSV/数据库导入时没自动解析),先加一步解析成Python对象:
import json # 先解析JSON字符串为Python列表 df["name"] = df["name"].apply(json.loads) # 之后重复情况1的explode和json_normalize步骤即可 df_exploded = df.explode("name", ignore_index=True) result = pd.concat([df_exploded["id"], pd.json_normalize(df_exploded["name"])], axis=1)
这样就能完美得到你想要的结构化结果啦!
内容的提问来源于stack exchange,提问作者Symphony
相关产品推荐
相关产品推荐

