python pandas astype не работает должным образом при соединении с кодером sklearn

#python #pandas #scikit-learn

Вопрос:

Панды == 1.2.3
склеарн == 0.24.2

Попытка преобразовать несколько двоичных столбцов в 1/0 с помощью порядкового кодера, а затем изменить их тип данных на «int8»

MRE:

 df = pd.DataFrame({"A":["True", "False", "True", "False", "False"], 
                   "B":["Yes", "No", "Yes", "Yes", "Yes"],
                   "C":[1, 4, 1, 4, 4]})
 

Выполнение следующего преобразует тип данных в «integer64» и в «float16» в «float64».

 bin_cols = ["A", "B", "C"]
df[bin_cols] = OrdinalEncoder() 
                .fit_transform(df[bin_cols]) 
                .astype('int8')
df.dtypes
>>> A  int64
>>> B  int64
>>> C  int64
 

Если я достану его и выступлю

 df[bin_cols].astype('int8').dtypes

>>> A  int8
>>> B  int8
>>> C  int8
 

Он правильно преобразуется в «целое число 8».

В чем может быть проблема?

РЕДАКТИРОВАТЬ: Если я дважды запускаю 2-й блок кода, он работает…

Комментарии:

1. Я не могу воспроизвести это. Пожалуйста, предоставьте некоторые примеры данных

2. В моем Jupyter это было int8 !, Однако я думаю, что это тоже сработало бы: astype(np.int8)

3. @ashkangh с первой попытки? Если вы запустите его повторно, он сработает, однако не при первом запуске.

4. Такое поведение невозможно воспроизвести в pandas 1.3.2 и scikit-learn 0.24.2

5. Нет, я не имел в виду, что ваш код не воспроизводим, поведение -нет. Этот код, выполняемый в чистой рабочей области с вышеперечисленными версиями, каждый раз создает 3 столбца, все из int8 которых имеют одинаковый тип, включая первый.