由于CSV文件中缺少值,因此无法拟合线性多元回归模型

时间:2019-09-18 21:52:37

标签: python pandas csv linear-regression

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

CSV file

我使用了以下代码:

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,并且仅使用areaage进行预测,则会出现错误,并且我得到正确的结果。

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

查看屏幕截图中的错误:

enter image description here

1 个答案:

答案 0 :(得分:2)

您的帖子中有两个问题:

  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)