You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pd.read_parquet的filters参数筛选分区Parquet数据?

解决Pandas读取分区Parquet时多OR条件筛选返回空的问题

当你用Pandas读取按Value列分区的Parquet文件时,单条件筛选能正常工作,但多OR条件返回空DataFrame,核心问题是filters参数的格式写错了。

错误写法(导致空DataFrame)

你可能写成了这种形式:

pd.read_parquet("path/to/parquet", filters=[("Value", "=", "A"), ("Value", "=", "B")])

这种写法实际是AND逻辑(要求Value同时等于A和B),自然查不到数据。

正确OR条件写法

Pandas的filters参数中,OR条件需要将每个分支放在单独的子列表里,格式如下:

pd.read_parquet("path/to/parquet", filters=[[("Value", "=", "A")], [("Value", "=", "B")]])

外层列表的每个子列表代表一个OR分支,这样就能正确筛选出Value为A或B的分区数据。

验证示例

先创建测试分区Parquet数据:

import pandas as pd
import numpy as np

# 生成测试数据
df = pd.DataFrame({
    "Value": np.repeat(["A", "B", "C"], 10),
    "Data": np.random.randn(30)
})

# 按Value列分区保存
df.to_parquet("test_parquet", partition_cols=["Value"])

再用正确的OR条件读取:

# 读取Value为A或B的分区
result = pd.read_parquet("test_parquet", filters=[[("Value", "=", "A")], [("Value", "=", "B")]])
print(result["Value"].unique())  # 输出 ['A' 'B']

补充说明

如果需要混合AND和OR条件,比如(Value == "A" AND Data > 0) OR (Value == "B" AND Data < 0),可以这样写:

filters=[
    [("Value", "=", "A"), ("Data", ">", 0)],
    [("Value", "=", "B"), ("Data", "<", 0)]
]
pd.read_parquet("test_parquet", filters=filters)

内容的提问来源于stack exchange,提问作者boshek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:17:40