Pandas如何仅替换DataFrame中值为空列表的单元格
Pandas按行替换列中空列表值实现方案
原始示例数据
测试DataFrame构造代码如下:
import pandas as pd df = pd.DataFrame({ 'variations_list1': [["yellow","ornage"], ["xl","xxl"], ["Burger","pizza"]], 'variations_list2': [[], [], ["$25","$30"]] })
原始数据打印效果:
variations_list1 variations_list2 0 ["yellow","ornage"] [] 1 ["xl","xxl"] [] 2 ["Burger","pizza"] ["$25","$30"]
处理逻辑
仅替换variations_list2列中值为空列表的单元格,取当前行variations_list1的列表值填充,非空单元格保留原值。
可直接运行的实现代码
通过apply按行遍历判断即可,通过判断列表长度是否为0识别空列表,兼容性最强,不会触发pandas的真值判断报错:
df['variations_list2'] = df.apply( lambda row: row['variations_list1'] if len(row['variations_list2']) == 0 else row['variations_list2'], axis=1 )
避坑提示
- 不要尝试直接用
df['variations_list2'] == []做整列条件筛选,列表是可变对象,pandas对存储列表的列做整列等值判断时会抛出ValueError: The truth value of a Series is ambiguous报错。
处理后结果
执行代码后打印DataFrame,输出完全符合预期:
variations_list1 variations_list2 0 ["yellow","ornage"] ["yellow","ornage"] 1 ["xl","xxl"] ["xl","xxl"] 2 ["Burger","pizza"] ["$25","$30"]
内容的提问来源于stack exchange,提问作者boyenec
相关产品推荐
相关产品推荐

