Вернуться метки категории для категориальной серии - PullRequest
0 голосов
/ 12 ноября 2018

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

data=pd.read_csv("iris.csv",header=None)
data[4]=data[4].astype("category")

Когда я печатаю значения данных [4], я получаю этот список:

1         Setosa
2         Setosa
3         Setosa
4         Setosa
5         Setosa
6         Setosa
7         Setosa
...
149    Virginica
150    Virginica
Name: 4, Length: 150, dtype: category
Categories (3, object): [Setosa, Versicolor, Virginica]

но я хочу иметь три категории в массиве, чтобы иметь что-то вроде:

[Setosa, Versicolor, Virginica]

Я оглядывался по сторонам, но не мог найти ничего, что могло бы послужить.

Любая помощь?

1 Ответ

0 голосов
/ 12 ноября 2018

data[4].cat.categories.values здесь может быть лучше, чем .unique().

Взгляните на https://pandas.pydata.org/pandas-docs/stable/categorical.html, «Работа с категориями».

Примечание. Результат функции unique () не всегда совпадает с Series.cat.categories, потому что Series.unique () имеет несколько гарантирует, а именно, что он возвращает категории в порядке внешний вид, и он включает в себя только те значения, которые на самом деле присутствуют.

.cat.categories.values кажется намного быстрее из-за перечисленных выше причин, я думаю.

Пример:

import pandas as pd
import numpy as np

s = pd.Series(np.random.choice(['a', 'b', 'c'], 1000), dtype = "category")

% timeit a = s.unique()

# 303 µs ± 23.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

% timeit b = s.cat.categories.values

# 1.26 µs ± 27.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

print(s.cat.categories.values)

# ['a' 'b' 'c']

Размер вашего набора данных и другие требования, вероятно, определят, что лучше.

...