如何将JSON字符串解析为Python Pandas DataFrame的行
Pandas展开字典列生成多行数据
场景说明
现有如下DataFrame:
| user | dates |
|---|---|
| a | {"2024-05-16": -167} |
| b | {"2024-03-28": -104, "2024-04-12": -108} |
需要将dates列中每个字典的键转为date列、对应值转为value列,每个键值对单独成一行,最终得到:
| user | date | value |
|---|---|---|
| a | 2024-05-16 | -167 |
| b | 2024-03-28 | -104 |
| b | 2024-04-12 | -108 |
解决方案
情况1:dates列已为Python字典类型
直接通过apply(pd.Series)展开字典,再用stack()将列转为行:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'user': ['a', 'b'], 'dates': [{"2024-05-16": -167}, {"2024-03-28": -104, "2024-04-12": -108}] }) # 展开字典并转换格式 df_expanded = df.set_index('user')['dates'].apply(pd.Series).stack().reset_index() # 重命名列名 df_expanded.columns = ['user', 'date', 'value'] print(df_expanded)
情况2:dates列为JSON字符串格式
如果dates存储的是字符串形式的字典,需先解析为Python字典,再执行上述步骤:
import pandas as pd import json # 构造原始DataFrame(dates为JSON字符串) df = pd.DataFrame({ 'user': ['a', 'b'], 'dates': ['{"2024-05-16": -167}', '{"2024-03-28": -104, "2024-04-12": -108}'] }) # 解析JSON字符串为字典 df['dates'] = df['dates'].apply(json.loads) # 后续步骤同情况1 df_expanded = df.set_index('user')['dates'].apply(pd.Series).stack().reset_index() df_expanded.columns = ['user', 'date', 'value'] print(df_expanded)
输出结果
执行代码后即可得到目标格式的DataFrame:
user date value 0 a 2024-05-16 -167 1 b 2024-03-28 -104 2 b 2024-04-12 -108
内容的提问来源于stack exchange,提问作者Woody
相关产品推荐
相关产品推荐

