我正在尝试使用多个变量执行线性回归模型。我有一个属性为'area', 'bedrooms', 'age', 'price'
的CSV文件,但是卧室的缺少值(即NaN
)。我想通过给出其他三个属性来拟合模型并预测价格,但是由于缺少一个值,因此显示错误input contains nan infinity or a value too large for dtype('float64')
。我找到了中位数并填写了缺失值,但是在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
,并且仅使用area
和age
进行预测,则会出现否错误,并且我得到正确的结果。
所以我的问题是:如何用CSV文件中的中位数替换缺失值?那是什么代码? 为什么我会收到错误消息?
查看屏幕截图中的错误:
答案 0 :(得分:2)
您的帖子中有两个问题:
fillna
,否则inplace=True
将返回一个副本。这就是为什么您仍然收到错误的原因。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)