Pracuję przez Pythona Wesa do analizy danych, a ja natknąłem się na dziwny problem, który nie został omówiony w książce.Zmienne jakościowe w ramce danych Panda?
W poniższym kodzie, na podstawie strony 199 jego książki, tworzę ramkę danych, a następnie używam pd.cut()
do utworzenia cat_obj
. Według książki, cat_obj
jest
„specjalny Categorical obiekt można traktować jak tablicę strun wskazujących nazwę bin;. Wewnętrznie zawiera on szereg poziomów wskazując różne nazwy kategorii wraz z etykietowania dla danych z okresu w atrybucie etykiet "
Awesome! Jeśli jednak użyję tego samego kodu pd.cut()
(w [5] poniżej), aby utworzyć nową kolumnę ramki danych (o nazwie df['cat']
), kolumna ta nie jest traktowana jako specjalna zmienna kategorialna , ale po prostu jako zwykła seria pand.
Jak zatem utworzyć kolumnę w ramce danych, która jest traktowana jako zmienna kategorialna?
In [4]:
import pandas as pd
raw_data = {'name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'],
'score': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['name', 'score'])
bins = [0, 25, 50, 75, 100]
group_names = ['Low', 'Okay', 'Good', 'Great']
In [5]:
cat_obj = pd.cut(df['score'], bins, labels=group_names)
df['cat'] = pd.cut(df['score'], bins, labels=group_names)
In [7]:
type(cat_obj)
Out[7]:
pandas.core.categorical.Categorical
In [8]:
type(df['cat'])
Out[8]:
pandas.core.series.Series
wszystkie kolumny o DataFrame będą Series, jakie zachowanie szukasz że nie osiągnąć? –
Rzeczy takie jak poziomy df ['cat']. Nie działają, ale cat_obj.levels ma – Anton
możliwy duplikat [Jak wygenerować pandas DataFrame kolumny Kategorialnej z kolumny ciągów?] (Http://stackoverflow.com/questions/ 15356433/jak-wygenerować-pandy-ramkę-kolumny-z-kategoriami-z-kolumny-kolumny) –