如何将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
相关产品推荐
相关产品推荐

