如何从pandas DataFrame列的列表内嵌字典中提取值生成新列
实现方法
你可以直接通过以下两种方式从列表嵌套字典的results列中提取label值生成新列:
方法1:apply实现(易读性高,适合小数据量)
如果每行results的列表固定只有1个字典元素,直接写lambda表达式取值即可:
import pandas as pd # 你的原始示例DataFrame df=pd.DataFrame({ 'results':[[{'label': 'POSITIVE', 'score': 0.9989271759986877}], [{'label': 'POSITIVE', 'score': 0.9988722801208496}] ]}) # 新增label列 df['label'] = df['results'].apply(lambda x: x[0]['label'])
如果要兼容列表为空、字典无label键的异常场景,避免报错可以加判断:
df['label'] = df['results'].apply(lambda x: x[0].get('label') if len(x) > 0 else None)
方法2:str访问器实现(性能更高,适合大数据量)
直接用pandas内置的序列化访问方法,不需要写自定义函数:
df['label'] = df['results'].str[0].str['label']
特殊场景补充
如果每行results列表中存在多个字典,需要提取所有label值的话,可以改成列表推导式实现:
df['label'] = df['results'].apply(lambda x: [item['label'] for item in x])
内容的提问来源于stack exchange,提问作者linPySp
相关产品推荐
相关产品推荐

