首页 > 解决方案 > 由于 CSV 文件中的缺失值,无法拟合线性多元回归模型

问题描述

我正在尝试使用多个变量执行线性回归模型。我有一个带有属性的 CSV 文件:'area', 'bedrooms', 'age', 'price',但卧室有一个缺失值(即NaN)。我想通过给出其他三个属性来拟合模型并预测价格,但由于一个缺失值,我看到了错误input contains nan infinity or a value too large for dtype('float64')。我找到了中位数并填写了缺失值,但在 CSV 文件中,它没有被替换并在拟合模型时给出错误。CSV 文件如下:

CSV 文件

我使用了以下代码:

df=pd.read_csv(r"C:\Users\rohit\Desktop\homeprices4.csv")

df

m=math.floor(df.bedrooms.median()) // m is median which I have calculated

m

df.bedrooms.fillna(m)

reg=linear_model.LinearRegression()

reg.fit(df[['area','bedrooms','age']],df.price)

在这一行之后,我收到了错误,因为卧室有一个缺失值。bedrooms如果我从这一行中删除并仅使用areaandage进行预测,那么没有错误,我得到正确的结果。

所以我的问题是:如何用 CSV 文件中的中位数替换缺失值?代码是什么?为什么我收到错误消息?

查看错误的屏幕截图:

在此处输入图像描述

标签: pythonpandascsvlinear-regression

解决方案


您的帖子中有两个问题:

  1. 您的更改不会保存到数据框中,因为除非传入参数,fillna否则会返回副本。inplace=True这就是为什么您仍然会收到错误消息的原因。
  2. 要将更改保存到 CSV,您需要使用DataFrame.to_csv(...),但鉴于我之前的观点,您可能不需要它。

我会通过数据清理步骤丰富您的管道并保存清理后的数据。我会做 2 个单独的脚本。

数据清洗:

path_raw_data= r"C:\Users\rohit\Desktop\homeprices4.csv"
path_clean_data= r"C:\Users\rohit\Desktop\homeprices4_clean.csv"
df=pd.read_csv(path_raw_data)
m=math.floor(df.bedrooms.median()) // m is median which I have calculated
df.bedrooms.fillna(m, inplace=True)
df.to_csv(path_clean_data)

线性回归:

path_clean_data= r"C:\Users\rohit\Desktop\homeprices4_clean.csv"
df=pd.read_csv(path_clean_data)
reg=linear_model.LinearRegression()
reg.fit(df[['area','bedrooms','age']],df.price)

推荐阅读