如何用Pandas筛选全NaN行并用上一行数据填充?
解决方案
代码实现
import pandas as pd import numpy as np # 构建示例DataFrame df = pd.DataFrame([list(range(8))+[np.nan]*2, [np.nan]*len(range(10)), range(10), [np.nan]*2+list(range(8)), range(10)]) # 筛选出所有元素均为NaN的行 all_nan_mask = df.isna().all(axis=1) # 用上一行数据填充这些全NaN行 df.loc[all_nan_mask] = df.shift(periods=1).loc[all_nan_mask] print(df)
逻辑解释
df.isna().all(axis=1):逐行校验是否所有列都是NaN,返回布尔型Series,标记需要处理的行。df.shift(periods=1):将整个DataFrame向上偏移一行,获取每行的上一行数据,再通过loc[all_nan_mask]定位到需要填充的行,赋值回原DataFrame即可完成填充。
执行代码后得到目标结果:
0 1 2 3 4 5 6 7 8 9 0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 NaN NaN 1 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 NaN NaN 2 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 3 NaN NaN 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 4 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
内容的提问来源于stack exchange,提问作者tesla1060
相关产品推荐
相关产品推荐

