如何基于Pandas DataFrame指定列组合值填充多列空值
解决方案
错误原因排查
- 数值拼接错误:
lacheck列为数值类型,直接和字符串拼接会触发类型错误,需要先转为字符串格式 - 索引使用错误:你代码中
df[filldescparty]的入参是筛选出来的DataFrame对象,不是合法的列索引,pandas会误认为你传入的是布尔筛选条件,所以报Boolean array expected错误 - 变量名混用:你全局操作的对象是
dffinalselection,代码中突然出现未定义的df变量,也会触发报错 - 拼接格式和预期不符:你原来的拼接逻辑没有加空格,和你期望的
5 - Res格式不匹配
修改后可运行代码
# 构造填充用的合并字段,数值转字符串+匹配期望的空格格式 dffinalselection['LineDescription'] = dffinalselection['lacheck'].astype(str) + " - " + dffinalselection['taxrate#1'] # 自动筛选所有description开头的列,自动适配1~10个的场景,无需手动修改 desc_columns = dffinalselection.filter(like='description').columns # 批量填充所有description列的空值(非空原值保留) dffinalselection[desc_columns] = dffinalselection[desc_columns].fillna( value=dffinalselection['LineDescription'], axis=0 ) # 若不需要中间拼接的LineDescription列,可执行下面的代码删除 # dffinalselection.drop('LineDescription', axis=1, inplace=True)
如果你需要不管原description列有没有值,全部替换为拼接的内容,把fillna那行换成下面的代码即可完全匹配你给出的示例输出:
dffinalselection[desc_columns] = dffinalselection['LineDescription']
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

