python - 在分类列上过滤 Dask Dataframe?
问题描述
假设我有一个大的水果数据框。我有数千行,但只有大约 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")
我是否在分类列上丢失了某些合并和过滤功能,或者我只是做错了(我对 dask 和 pandas 仍然非常陌生)。谢谢!
解决方案
这是一个显示此工作正常的示例:
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
我建议构建一个最小的失败示例
推荐阅读
- flutter - 自定义液体滑动动画
- java - NoSuchMethodException while sending email in spring boot
- javascript - 拖动操作在 iOS Safari 上运行良好,但在 Android 上不行
- python - 获得更好的 OCR 结果
- django-models - django 按另一个类对类对象进行排序
- java - Android 无法解析内部网络上的主机名 - 但我无法使用 IP 地址
- javascript - 2个数组匹配,对象数组的转换
- visual-studio-code - 如何将 TextMate 语法注入 VS Code 中的 Markdown 标题?
- reactjs - 在“normalizr”中找不到架构
- swift - 以编程方式从 UITabBarController 正确导航到 UIViewController (Swift - UIKit),反之亦然