pandas如何仅对所有值均为null的列执行fillna填充操作
pandas仅填充全空列的实现方法
正确实现逻辑
- 首先用
df.isnull().all()按列判断每一列是否所有值都为NaN,返回布尔值序列,值为True的列就是要填充的目标列 - 对筛选出的目标列统一赋值为100即可
完整可运行代码
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame(data = {"col1":[3, np.nan, np.nan, 21, np.nan], "col2":[4, np.nan, 12, np.nan, np.nan], "col3":[33, np.nan, 55, np.nan, np.nan], "col4":[np.nan, np.nan, np.nan, np.nan, np.nan]}) # 筛选全为空值的列 full_null_cols = df.columns[df.isnull().all()] # 给全空列赋值100 df[full_null_cols] = 100 # 也可以用一行代码实现上述两步操作 # df.loc[:, df.isnull().all()] = 100 print(df)
运行输出
col1 col2 col3 col4 0 3.0 4.0 33.0 100 1 NaN NaN NaN 100 2 NaN 12.0 55.0 100 3 21.0 NaN NaN 100 4 NaN NaN NaN 100
原代码错误原因
你之前的代码核心问题是判断维度和逻辑不符合需求:df.isnull().all(axis=1)是按行判断整行是否全为空值,和你要筛选全空列的需求完全不符,同时where方法的替换逻辑也和预期相反,所以无法得到正确结果。
内容的提问来源于stack exchange,提问作者SRN
相关产品推荐
相关产品推荐

