如何从DataFrame的字典列表列提取指定键生成新列
提取DataFrame字典列表列中的指定键值到新列
针对你的需求,这里提供两种常用解决方案,可根据你期望的最终数据结构选择:
方案1:将每个评论字典展开为单独行
如果需要把reviews列中每个字典对应的item_id和recommend单独成行,同时保留原数据的其他字段,用explode配合map即可实现:
import pandas as pd # 示例数据(替换为你的实际DataFrame) df = pd.DataFrame({ 'record_id': [101, 102], 'reviews': [ [{'item_id': 'PROD001', 'recommend': True, 'comment': 'Great product'}, {'item_id': 'PROD002', 'recommend': False, 'comment': 'Not worth it'}], [{'item_id': 'PROD003', 'recommend': True, 'comment': 'Highly recommended'}] ] }) # 展开reviews列的每个字典为单独行 df_expanded = df.explode('reviews', ignore_index=True) # 提取指定键值到新列 df_expanded['item_id'] = df_expanded['reviews'].map(lambda x: x.get('item_id')) df_expanded['recommend'] = df_expanded['reviews'].map(lambda x: x.get('recommend')) # 可选:移除原reviews列 df_expanded = df_expanded.drop('reviews', axis=1) print(df_expanded)
输出结果示例:
record_id item_id recommend 0 101 PROD001 True 1 101 PROD002 False 2 102 PROD003 True
方案2:保留原行,提取值为列表
如果希望保留原数据的行结构,把同一条记录下所有评论的item_id和recommend整理成列表作为新列:
import pandas as pd # 示例数据(替换为你的实际DataFrame) df = pd.DataFrame({ 'record_id': [101, 102], 'reviews': [ [{'item_id': 'PROD001', 'recommend': True}, {'item_id': 'PROD002', 'recommend': False}], [{'item_id': 'PROD003', 'recommend': True}] ] }) # 提取每个reviews列表中的item_id和recommend到新列 df['item_ids'] = df['reviews'].apply(lambda lst: [d.get('item_id') for d in lst]) df['recommends'] = df['reviews'].apply(lambda lst: [d.get('recommend') for d in lst]) # 可选:移除原reviews列 df = df.drop('reviews', axis=1) print(df)
输出结果示例:
record_id item_ids recommends 0 101 [PROD001, PROD002] [True, False] 1 102 [PROD003] [True]
*注意:*如果你的reviews列存在空列表或None的情况,get方法会返回None,可根据需求添加默认值,比如x.get('item_id', '无数据')来替代None。
内容的提问来源于stack exchange,提问作者Julio
相关产品推荐
相关产品推荐

