Недавно я начал изучать python, чтобы разработать прогнозную модель для исследовательского проекта с использованием методов машинного обучения. Я использовал OneHotEncoder для кодирования всех категориальных переменных в моем наборе данных
# Encode categorical data with oneHotEncoder
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(handle_unknown='ignore')
Z = ohe.fit_transform(Z)
Теперь я хочу создать фрейм данных с результатами OneHotEncoder. Я хочу, чтобы столбцы фрейма данных были новыми категориями, полученными в результате кодирования, поэтому я использую атрибут Categories_ . При запуске следующей строки кода:
ohe_df = pd.DataFrame(Z, columns=ohe.categories_)
я получаю сообщение об ошибке: ValueError: все массивы должны быть одинаковой длины
Я понимаю, что упомянутые массивы в сообщении об ошибке представлены массивы категорий, каждая из которых имеет разную длину в зависимости от количества категорий, которые она содержит, но я не уверен, каков правильный способ создания фрейма данных с новыми категориями в качестве столбцов (когда есть несколько
Я попытался сделать это с небольшим набором данных, который содержал только одну функцию, и это сработало:
ohe = OneHotEncoder(handle_unknown='ignore', sparse=False)
df = pd.DataFrame(['Male', 'Female', 'Female'])
results = ohe.fit_transform(df)
ohe_df = pd.DataFrame(results, columns=ohe.categories_)
ohe_df.head()
Female Male
0 0.0 1.0
1 1.0 0.0
2 1.0 0.0
Итак, как мне сделать то же самое для моего большого набора данных с многочисленными функциями .
Заранее спасибо.
РЕДАКТИРОВАТЬ:
По запросу я придумал MWE, чтобы продемонстрировать, как он не работает:
import numpy as np
import pandas as pd
# create dataframe
df = pd.DataFrame(np.array([['Male', 'Yes', 'Forceps'], ['Female', 'No', 'Forceps and ventouse'],
['Female','missing','None'], ['Male','Yes','Ventouse']]),
columns=['gender', 'diabetes', 'assistance'])
df.head()
# encode categorical data
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(handle_unknown='ignore')
results = ohe.fit_transform(df)
print(results)
На этом этапе я создал фрейм данных категориальных данных и закодировал его. Теперь я хочу создать еще один фрейм данных, чтобы столбцы нового фрейма данных были категориями, созданными OneHotEncoder, а строки - закодированными данными. Для этого я попробовал две вещи:
ohe_df = pd.DataFrame(results, columns=np.concatenate(ohe.categories_))
И я попробовал:
ohe_df = pd.DataFrame(results, columns=ohe.get_feature_names(input_features=df.columns))
Что привело к ошибке: ValueError: Форма переданных значений (4, 1) индексы подразумевают (4, 9)