Получить список имен столбцов, имеющих объектный или категориальный тип - PullRequest
0 голосов
/ 24 декабря 2018

Моя цель - получить объект списка: ['assetCode', 'assetName'], где содержимым являются метки Panda.series, которые извлекаются на основе более чем одного условия.Я попытался:

tmp3 = datatype[datatype == 'object' | datatype == 'category'].index # extract label from Pandas.series

Это дает ошибку: TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]

Однако, хотя и не так элегантно, мне удалось найти следующие два рабочих решения:

tmp2 = datatype[datatype == 'object'].index # extract label from Pandas.series
tmp2[0]
'assetCode'


tmp1 = datatype[datatype == 'category'].index # extract label from Pandas.series
tmp1[0]
'assetName'

Как мне объединить эти две строки в объект списка?Есть ли лучший способ достичь этой цели, чем способ, которым я пытаюсь это сделать?

1 Ответ

0 голосов
/ 24 декабря 2018

Настройка

df

   A  B  C
0  8  4  2
1  8  8  6
2  8  5  2

datatype = df.dtypes
datatype

A      object
B    category
C       int64
dtype: object

Похоже, вы пытаетесь выбрать объект и категориальные столбцы в некотором кадре данных (здесь не показано).Чтобы исправить свой код, используйте:

tmp3 = datatype[(datatype == 'object') | (datatype == 'category')].index.tolist()
tmp3
#  ['A', 'B']

Поскольку побитовые операторы имеют более высокий приоритет, вам нужно будет использовать скобки перед ИЛИ масок.После этого индексация работает нормально.

Чтобы получить список, позвоните .index.tolist().


Другое решение - select_dtypes:

df.select_dtypes(include=['object', 'category'])

   A  B
0  8  4
1  8  8
2  8  5

df.select_dtypes(include=['object', 'category']).columns
# ['A', 'B']

Это позволяет обойтись без промежуточного datatype серия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...