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

如何将Pandas DataFrame中字典列表列拆解为多列

问题描述

我有一个结构如下的Pandas DataFrame:

market_hash_name                                  prices
0   10 Year Birthday Sticker Capsule    [{'market': 'gamerpay', 'price': 88, 'quantity...
1   1st Lieutenant Farlow | SWAT    [{'market': 'skinbid', 'price': 311, 'quantity...
2   2020 RMR Challengers    [{'market': 'skinbid', 'price': 15, 'quantity'...
3   2020 RMR Contenders [{'market': 'skinbid', 'price': 14, 'quantity'...
4   2020 RMR Legends    [{'market': 'skinbid', 'price': 14, 'quantity'...

希望将prices列(每行包含一个字典列表)拆解为新列,以字典中的market值作为列名,对应price值作为列数据,目标格式如下:

market_hash_name                      gamerpay        skinbid        csgofloat  
0   10 Year Birthday Sticker Capsule         88             86              75

每个prices列的字典列表最多包含22个来自不同市场的字典,尝试过pd.Series()和pd.json_normalize()方法,但结果不符合预期,寻求解决方案。

解决方案

直接通过以下代码即可实现需求:

import pandas as pd

# 假设你的原始DataFrame名为df
# 处理prices列:将每行的字典列表转为{市场名: 价格}的字典,再转为Series
price_cols = df['prices'].apply(lambda lst: pd.Series({item['market']: item['price'] for item in lst}))

# 合并原DataFrame的market_hash_name列与处理后的价格列
final_df = pd.concat([df['market_hash_name'], price_cols], axis=1)

# 可选:填充缺失的价格值(比如用0)
final_df = final_df.fillna(0)

# 查看结果
print(final_df)

关键逻辑说明

  • 利用apply遍历prices列的每个字典列表,通过字典推导式提取market和price的映射关系,再转为Series——这样每个市场会自动成为一列,该行没有的市场值会被填充为NaN。
  • pd.concat横向合并列,得到目标格式的DataFrame。

如果之前用pd.json_normalize没成功,是因为json_normalize默认处理的是字典而非字典列表,需要先将列表展开再处理,但上述方法更直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:05:22