如何遍历pandas DataFrame中列表类型的列并按字典映射替换值?
问题原因
Series.replace() 只会匹配元素的完整值,你当前label列的每个元素都是列表,方法无法识别到列表内部的单个数值,因此替换不生效。
解决方法
直接用apply遍历每一行的列表元素,对列表内的每个数值做映射替换即可:
label_dict = {1:'production', 2:'to_be_discussed'} # 遍历每个列表,替换内部数值 df['label'] = df['label'].apply(lambda x: [label_dict[num] for num in x])
如果你的列表中可能存在label_dict未定义的数值,可以调整为以下写法避免KeyError,未匹配到的数值会保留原值:
df['label'] = df['label'].apply(lambda x: [label_dict.get(num, num) for num in x])
替换后结果
针对你给出的示例数据,运行后label列的输出为:
0 [to_be_discussed, production] 1 [production] Name: label, dtype: object
完全符合预期。
内容的提问来源于stack exchange,提问作者sinG20
相关产品推荐
相关产品推荐

