Как изменить тип данных нескольких столбцов в пандах - PullRequest
2 голосов
/ 24 апреля 2019

Я пытаюсь запустить Случайный Лес на кадре данных панд.Я знаю, что в фрейме данных нет нулей или бесконечностей, но я постоянно получаю ValueError, когда я подгоняю модель.Предположительно это потому, что у меня есть столбцы flaot64, а не float32;У меня также есть много столбцов типа bool и int.Есть ли способ изменить все столбцы с плавающей точкой на float32?

Я попытался переписать CSV и уверен, что проблема не в этом.У меня никогда не было проблем с запуском случайных лесов на float64, поэтому я не уверен, что происходит на этот раз.

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').

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Чтобы изменить dtypes всех столбцов float64 на столбцы float32, попробуйте следующее:

for column in df.columns:
    if df[column].dtype == 'float64':
        df[column] = df[column].astype(np.float32)
0 голосов
/ 24 апреля 2019

Вы можете использовать .astype() метод для любого объекта pandas для преобразования типов данных.

Пример:

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

Затем вам нужно обработать любые значения NaN, используя документацию .fillna(), здесь

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
...