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

如何将JSON字符串解析为Python Pandas DataFrame的行

Pandas展开字典列生成多行数据

场景说明

现有如下DataFrame:

userdates
a{"2024-05-16": -167}
b{"2024-03-28": -104, "2024-04-12": -108}

需要将dates列中每个字典的键转为date列、对应值转为value列,每个键值对单独成一行,最终得到:

userdatevalue
a2024-05-16-167
b2024-03-28-104
b2024-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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:16:00