我正在尝试在熊猫数据帧上运行随机森林。我知道数据框中没有null或无穷大,但在我拟合模型时会不断收到ValueError。大概是因为我有flaot64列,而不是float32;我也有很多类型为bool和int的列。有没有办法将所有float列更改为float32?
我已经尝试过重写CSV,并且可以肯定地说问题不在于此。我之前从未在float64s上运行随机森林时遇到过问题,因此我不确定这次出了什么问题。
labels = electric['electric_ratio']
electric = electric[[x for x in electric.columns if x != 'electric_ratio']]
electric_list = electric.columns
first_train, first_test, train_labels, test_labels = train_test_split(electric, labels)
rf = RandomForestRegressor(n_estimators = 1000, random_state=88)
rf_1 = rf.fit(first_train, train_labels)
我希望这可以适合模型,但始终如一地
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
答案 0 :(得分:1)
要将所有float64列的dtypes更改为float32列,请尝试以下操作:
for column in df.columns:
if df[column].dtype == 'float64':
df[column] = df[column].astype(np.float32)
答案 1 :(得分:0)
您可以对任何熊猫对象使用.astype()
method来转换数据类型。
示例:
x = pd.DataFrame({'col1':[True, False, True], 'col2':[1, 2, 3], 'col3': [float('nan'), 0, None] })
x = x.astype('float32')
print(x)
Out[2]:
col1 col2 col3
0 1.0 1.0 NaN
1 0.0 2.0 0.0
2 1.0 3.0 NaN
然后您需要使用.fillna()
文档处理任何NaN值,因为这是here
x = x.fillna(0)
Out[3]:
col1 col2 col3
0 1.0 1.0 0.0
1 0.0 2.0 0.0
2 1.0 3.0 0.0