You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

三角DataFrame中NaN值的插补/预测方法咨询(规避单样本循环线性回归)

针对三角缺失DataFrame的简便插补方案

方法1:镜像填充(对称矩阵专属,最简便)

如果你的矩阵是对称结构(比如相关系数矩阵、距离矩阵),直接把上三角的值镜像到下三角,一行代码就能搞定:

import pandas as pd

# 假设你的DataFrame名为df
df_filled = df.where(~df.isna(), df.T)

原理:利用转置矩阵df.T的对称特性,通过where方法将原矩阵的NaN位置替换为转置后对应位置的有效值。

方法2:趋势类填充(非对称场景适用)

如果矩阵非对称,比如时间序列滞后矩阵、面板数据结构,可以用以下两种内置方法批量填充:

线性插值

根据行/列已有数值的线性趋势补全缺失值,无需循环:

# 按行插值:适合每行有连续递增/递减趋势的场景
df_filled = df.interpolate(axis=1, method='linear')

# 按列插值:适合列维度有明显趋势的场景
df_filled = df.interpolate(axis=0, method='linear')

滚动均值填充

针对数据波动较小的场景,用已有值的滚动均值填充该行/列的NaN:

# 按行取前3个非NaN值的滚动均值填充缺失项
df_filled = df.apply(lambda row: row.fillna(row.dropna().rolling(3, min_periods=1).mean().iloc[-1]), axis=1)

方法3:批量机器学习填充(精准度更高)

如果需要更精准的预测填充,可采用批量处理的机器学习方法,完全规避单样本循环:

KNN插补

基于样本相似度批量填充,用sklearn内置工具实现:

from sklearn.impute import KNNImputer

imputer = KNNImputer(n_neighbors=3)
df_filled = pd.DataFrame(imputer.fit_transform(df), columns=df.columns, index=df.index)

原理:通过计算每行与其他行的相似度,选取最相似的3行有效值的均值填充缺失项,全程批量运算。

SVD矩阵分解填充

利用奇异值分解重构完整矩阵,适合大规模缺失矩阵:

from fancyimpute import SoftImpute

# SoftImpute基于SVD实现低秩矩阵重构,自动填充缺失值
df_filled = pd.DataFrame(SoftImpute().fit_transform(df), columns=df.columns, index=df.index)

内容的提问来源于stack exchange,提问作者Muhammad Osama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:36:22