Фильтровать Dask Dataframe по категориальному столбцу? - PullRequest
0 голосов
/ 05 сентября 2018

Скажем, у меня есть большой пакет данных фруктов. У меня есть тысячи строк, но только около 30 уникальных названий фруктов, поэтому я делаю этот столбец категорией:

df['fruit_name'] = df.fruit_name.astype('category')

Теперь, когда это категория, я больше не могу ее фильтровать? Например,

df_kiwi = df[df['fruit_name'] == 'kiwi']

вернет TypeError («недопустимое сравнение типов»)

Если я пытаюсь создать «фиктивный» фрейм данных и объединиться с ним, я получаю ValueError: «Вы пытаетесь слить столбцы int8 и категории ...»

df_dummy = pd.DataFrame(data={'fruit_name': 'kiwi'}, index=range(1))
df_dummy['fruit_name'] = df_dummy.fruit_name.astype('category')

df_new = df.merge(df_dummy, how="inner", on="fruit_name")

Потеряю ли я определенные функции слияния и фильтрации в категориальном столбце, или я просто делаю это неправильно (я все еще очень плохо знаком с даском и пандами). Спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

Вот пример, демонстрирующий эту работоспособность:

In [1]: import dask

In [2]: df = dask.datasets.timeseries()

In [3]: df.head()
Out[3]: 
                       id      name         x         y
timestamp                                              
2000-01-01 00:00:00   978    Hannah  0.194721  0.518782
2000-01-01 00:00:01   973   Michael -0.894162 -0.454409
2000-01-01 00:00:02  1043       Bob  0.829046 -0.585921
2000-01-01 00:00:03  1027     Edith -0.109735  0.563914
2000-01-01 00:00:04   970  Patricia -0.621248 -0.655324

In [4]: df['name'] = df.name.astype('category')

In [5]: df[df.name == 'Alice'].head()
Out[5]: 
                       id   name         x         y
timestamp                                           
2000-01-01 00:00:23   997  Alice -0.662165 -0.260169
2000-01-01 00:00:58  1012  Alice -0.840159 -0.036770
2000-01-01 00:01:23   961  Alice  0.831663  0.022570
2000-01-01 00:01:27   987  Alice -0.874289 -0.358708
2000-01-01 00:02:09   984  Alice  0.445238 -0.658470

Я рекомендую построить минимальный неудачный пример

...