pandas DataFrame конвертирует коды или метки в категориальные - PullRequest
1 голос
/ 12 февраля 2020

Я хотел бы преобразовать серию данных в категориальные, учитывая существующее отображение кода / метки категориальных данных. Я борюсь с преобразованием серии, содержащей (а) метки, в категориальную, и серии, содержащей коды (b), в категориальную.

Данные серии содержат коды (вместо меток категорий, которые отличаются от найдено много примеров).

Вот что я получил до сих пор:

# this is the code-label mapping that I'd like to apply for the
# (a) label -> cat conversion (`df1`)
# (b) code -> cat conversion (`df2`)

>>> cat = pd.Categorical.from_codes([-1, 1, 2, 3], ['-', 'a', 'b', 'c'])
>>> cat.codes
array([-1,  1,  2,  3], dtype=int8)
>>> cat
[NaN, a, b, c]
Categories (4, object): [-, a, b, c]
>>> cat.__array__
<bound method Categorical.__array__ of [NaN, a, b, c]
Categories (4, object): [-, a, b, c]>


>>> df1
   x
0  a
1  a
2  c
3  b
4  b
>>> df2
   y
0  nan
1  1
2  3
3  2
4  2

Как бы я go о преобразовании x для использования cat в качестве типа. Я думаю, что проблема у меня заключается в том, что я не совсем понимаю, что такое pd.Categorical на самом деле или как оно предназначено для использования (это dtype (не кажется так), действительно ли это серия (не кажется, что либо, так как тогда это позволит дублировать))? Кажется, он содержит только фактическое сопоставление меток кода, но я не уверен, как его использовать (т.е. применить его к уже существующей серии).

1 Ответ

1 голос
/ 12 февраля 2020

Если я вас правильно понимаю, вы можете преобразовать df1.x в категории cat, используя .astype в атрибуте dtype

df1.x.astype(cat.dtype)

Out[950]:
0    a
1    a
2    c
3    b
4    b
Name: x, dtype: category
Categories (4, object): [-, a, b, c]
...