我在使用 Jupyter Notebook 时遇到 ValueError,需要帮助找出出现此错误的原因以及如何修复它

I have a ValueError while using Jupyter Notebook and need help to find out why I get this error and how to fix it

当我运行这个代码时:

from sklearn.tree import DecisionTreeRegressor 
melbourne_model = DecisionTreeRegressor() 
melbourne_model.fit(X, y)

我得到这个输出:

ValueError: Input contains NaN, infinity or a value too large for dtype('float32').

此错误指向显示 melbourne_model.fit(X, y).
的行 我希望代码适合 Xy 的模型,这样我就可以根据我输入的一些变量(例如建造年份、土地面积、rooms/bedrooms 对墨尔本的房屋进行未来预测,位置等。由于这个错误,现在我不能这样做。

我认为这是因为 Xy 不是 NumPy 数组,当我使用 np.asarray() 并将我想要转换的内容放入 NumPy 数组时,它不会工作。我知道这一点是因为当我写 type(X)type(y) 时,我得到 pandas.core.series.Series.

我文件中的全部代码:

import pandas as pd
import numpy as np
melbourne_file_path = 'melb_data.csv\melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path)
np.asarray(melbourne_data.Price)
y = melbourne_data.Price
melbourne_predictors = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 
                    'YearBuilt', 'Lattitude', 'Longtitude']
np.asarray(melbourne_data[melbourne_predictors])
X = melbourne_data[melbourne_predictors]
from sklearn.tree import DecisionTreeRegressor
melbourne_model = DecisionTreeRegressor()
melbourne_model.fit(X, y)

我正在使用 Jupyter Notebook 作为 Anaconda 的一部分。

我使用的CSV文件可以下载here。 下载文件夹后,您需要解压缩文件,而 csv 文件位于该文件夹内。您可以根据文件所在的位置制作自己的 melbourne_file_path

您收到的错误非常明显:Input contains NaN, infinity or a value too large。问题不在于您的输入是 pandas 系列,而是您的数据缺少值!例如,在 Kaggle 上快速浏览一下您的 CSV 文件会发现第 15 行和第 16 行缺少很多字段。

如何处理这些缺失值由您决定。一种方法是删除任何缺少 1 个或多个值的行:df.dropna(inplace=True)。这应该使 RandomForestRegressor 无误地适应,但如果删除了太多行,则可能会使您的结果产生偏差。一种可能更好的方法是用列平均值填充缺失值:df.fillna(df.mean()).