Pandas如何按列优先级填充DataFrame指定列的nan空值
错误原因
Series.fillna()方法的value参数仅支持标量、字典或Series类型,你传入了双列的DataFrame,因此触发类型错误。
解决方案
按照「优先用B列填充、B列为空再用C列填充」的规则,链式调用两次fillna即可实现需求:
import pandas as pd import numpy as np xdf = pd.DataFrame({'A':[10,20,np.nan,np.nan],'B':[15,np.nan,30,np.nan],'C':[np.nan,np.nan,35,40]}) # 按优先级填充A列空值 xdf['A'] = xdf['A'].fillna(xdf['B']).fillna(xdf['C'])
运行后输出结果和你期望的完全一致:
A B C 0 10.0 15.0 NaN 1 20.0 NaN NaN 2 30.0 30.0 35.0 3 40.0 NaN 40.0
如果后续填充优先级的列数较多,也可以用批量按行取第一个非空值的写法,不用多次调用fillna:
xdf['A'] = xdf['A'].fillna(xdf[['B', 'C']].bfill(axis=1).iloc[:, 0])
内容的提问来源于stack exchange,提问作者Mainland
相关产品推荐
相关产品推荐

