在不太理想的情况下,我希望使用>=在镶木地板数据集中筛选值<然而,由于数据集中的数据类型是混合的,因此字段似乎是作为对象读取的。
在计算之前,有没有方法将列强制转换为不同的数据类型:
即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
,我认为您不需要强制转换。