如何在Python中用线性方程Y=aX+b替换DataFrame的缺失值
实现代码
我们使用pandas库完成该需求,以下是完整可运行代码:
情况1:填充为计算后的数值结果
如果需要将缺失值替换为线性方程的实际计算值,使用如下代码:
import pandas as pd import numpy as np # 构造示例数据表,你可以替换为读取自己的表格数据(如pd.read_excel、pd.read_csv) df = pd.DataFrame({ 'Bird1': [22, np.nan, 3, 1], 'Bird2': [33, 4, np.nan, np.nan], 'Bird3': ['X0', 'X1', 'X2', 'X3'] }) # 定义线性方程的常数a、b,可根据实际需求修改 a = 2 b = 1 # 从Bird3列提取自变量X的数值(如果你的Bird3本身就是数值,可跳过这一步,直接用row['Bird3']计算) df['x_val'] = df['Bird3'].str.replace('X', '').astype(int) # 填充Bird1列的缺失值 df['Bird1'] = df.apply( lambda row: a * row['x_val'] + b if pd.isna(row['Bird1']) else row['Bird1'], axis=1 ) # 填充Bird2列的缺失值 df['Bird2'] = df.apply( lambda row: a * row['x_val'] + b if pd.isna(row['Bird2']) else row['Bird2'], axis=1 ) # 删除辅助计算的临时列 df = df.drop(columns=['x_val']) print(df)
情况2:填充为aX1+b格式的公式字符串
如果需要和示例一样保留公式字符串格式,使用如下代码:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Bird1': [22, np.nan, 3, 1], 'Bird2': [33, 4, np.nan, np.nan], 'Bird3': ['X0', 'X1', 'X2', 'X3'] }) # 填充Bird1列缺失值 df['Bird1'] = df.apply( lambda row: f'a{row["Bird3"]}+b' if pd.isna(row['Bird1']) else row['Bird1'], axis=1 ) # 填充Bird2列缺失值 df['Bird2'] = df.apply( lambda row: f'a{row["Bird3"]}+b' if pd.isna(row['Bird2']) else row['Bird2'], axis=1 ) print(df)
内容的提问来源于stack exchange,提问作者gveronese
相关产品推荐
相关产品推荐

