如何用Pythonic方式实现pandas基于列均值标准差的缺失值填充
缺失值填充的Python风格优化实现
你原有的逐单元格循环逻辑可以通过pandas向量化操作完全替代,数据量越大效率提升越明显,且输出结果和原有逻辑完全一致。
完整可运行代码如下:
import numpy as np import pandas as pd # 构造测试数据集 df = pd.DataFrame({ 'A': [1,2,3,4,5,np.nan,7,8,9], 'B': [7,9,np.nan,13,15,17,19,21,23], 'C': [-5,0,5,10,np.nan,20,25,30,35] }) print("填充前:") print(df) # 预计算列维度的均值、标准差,和原逻辑保持一致 col_avg = df.mean(axis=0) col_std = df.std(axis=0) # 向量化计算每行的标准化后均值,替代循环中逐行计算nanmean的逻辑 row_norm_mean = ((df - col_avg) / col_std).mean(axis=1, skipna=True) # 生成所有位置的对应填充值 fill_values = col_avg + col_std * row_norm_mean.values.reshape(-1, 1) # 仅将原数据的空值替换为对应位置的填充值 df = df.where(df.notna(), fill_values) print("\n填充后:") print(df)
方案说明
- 全程使用pandas、numpy内置向量化操作,完全移除了Python层的双重循环,性能远高于原有
iterrows实现 - 填充逻辑和你原有代码100%对齐,输出结果完全相同
- 代码结构更清晰,符合Python数据处理领域的常规编码风格
内容的提问来源于stack exchange,提问作者TPM
相关产品推荐
相关产品推荐

