Pandas nunique () только для категориальных столбцов, иначе NULL? - PullRequest
2 голосов
/ 16 мая 2019

Я хочу проверить количество уникальных значений для категориальных столбцов в кадре данных. df.nunique () дает мне уникальные значения для всех столбцов, что занимает много времени. Чтобы сделать это быстрее, я хочу пропустить все, что является числовым столбцом. Тем не менее, я все еще хочу, чтобы выходные данные были полными сериями, содержащими все столбцы, только с Null для числовых столбцов (и без вычисления этих столбцов).

Я играл с df._get_numeric_data (), sets и df.unquniue (), но пока не получил желаемый результат.

Итак, ввод

col_name type
col1    object
col2    object
col3    float64
col4    float64
col5    float64
col6    object
col7    float64
col8    object
col9    object

Желаемый вывод:

col_name    nunqiue
col1    23
col2    3
col3    null
col4    null
col5    null
col6    4
col7    null
col8    6
col9    2

Ключевым моментом здесь является сохранение вычислительной работы от вычисления уникальных значений с плавающей запятой, и сделать это в обтекаемом стиле pandaish ...

Спасибо!

1 Ответ

2 голосов
/ 16 мая 2019

MCVE

df = pd.DataFrame(
       np.random.randint(1, 100, (100, 9)), columns=[f'col{i}' for i in range(1, 10)])

df[['col1', 'col2', 'col6', 'col8', 'col9']] = \
    df[['col1', 'col2', 'col6', 'col8', 'col9']].astype(object)

>>> df.dtypes
col1    object
col2    object
col3     int32
col4     int32
col5     int32
col6    object
col7     int32
col8    object
col9    object
dtype: object

Вы можете использовать exclude аргумент select_dtypes, чтобы исключить все числовые столбцы из вашего вычисления.

df.select_dtypes(exclude='number').nunique().reindex(df.columns)

col1    62.0
col2    63.0
col3     NaN
col4     NaN
col5     NaN
col6    63.0
col7     NaN
col8    65.0
col9    61.0
dtype: float64

Вы можете поиграть с параметрами include и exclude до select_dtypes, чтобы точно соответствовать столбцам, которые вы хотите включить.

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