在pyarrow数据集筛选器中执行求值之前,将列强制转换为不同的数据类型



在不太理想的情况下,我希望使用>=在镶木地板数据集中筛选值<然而,由于数据集中的数据类型是混合的,因此字段似乎是作为对象读取的。

在计算之前,有没有方法将列强制转换为不同的数据类型:

即ds.field('value'(.cast('int8'(>60成为过滤器列表的一部分?

ParquetDataset(folder, use_legacy_dataset=False, filters=[('group','==',group),('table','==',table),(ds.field('value').cast('uint8') > 60)]).read().to_pandas()

我尝试了上面的方法,但似乎不起作用,它只是返回:

TypeError:类型为"pyarrow"的对象_计算表达式"没有len((

数据集api可以过滤表达式。

import pyarrow.dataset as ds
expr = (ds.field('group') == group) & (ds.field('table') == table) & (ds.field('value').cast('uint8') > 60)
ds.dataset(folder).to_table(filter=expr).to_pandas()

出现语法错误:

(ds.field('value').cast('uint8') > 60)

这返回了一个不是您想要的表达式。你想要一个元组:

(ds.field('value').cast('uint8'), ">", 60)

这就是为什么它抱怨TypeError: object of type 'pyarrow._compute.Expression' has no len(),它期望一个元组

PS:

字段似乎是作为对象读取的。

pyarrow中没有object,我认为您不需要强制转换。

相关内容

  • 没有找到相关文章