Dlaczego konwertujesz kategoryczne dane na liczby całkowite? Nie wierzę, że oszczędzasz pamięć, jeśli to jest twój cel.
df = pd.DataFrame({'cat': pd.Categorical(['a', 'a', 'a', 'b', 'b', 'c'])})
df2 = pd.DataFrame({'cat': [1, 1, 1, 2, 2, 3]})
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6 entries, 0 to 5
Data columns (total 1 columns):
cat 6 non-null category
dtypes: category(1)
memory usage: 78.0 bytes
>>> df2.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6 entries, 0 to 5
Data columns (total 1 columns):
cat 6 non-null int64
dtypes: int64(1)
memory usage: 96.0 bytes
Kody kategoryczne są po prostu liczbami całkowitymi dla unikatowych pozycji w danej kategorii. Natomiast get_dummies zwraca nową kolumnę dla każdego unikalnego elementu. Wartość w kolumnie wskazuje, czy rekord ma ten atrybut.
>>> pd.core.reshape.get_dummies(df)
Out[30]:
cat_a cat_b cat_c
0 1 0 0
1 1 0 0
2 1 0 0
3 0 1 0
4 0 1 0
5 0 0 1
Aby uzyskać kody bezpośrednio, można użyć:
df['codes'] = [df.cat.codes.to_list()]
Jeśli chcesz tylko do konwersji wartości numerycznych dla sklearn dlaczego nie [DictVectoriser] (http://scikit-learn.org/ stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html)? – EdChum
Szczerze mówiąc, Ed, ponieważ nie wiedziałem, że istnieje :) –
Prawdopodobnie okaże się, że sklearn ma większość twoich potrzeb przetwarzania danych – EdChum