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

如何在Pandas中读取Parquet分区数据集的指定时间范围数据?

高效读取分区Parquet指定时间范围数据

你已经通过year和month字段对Parquet文件做了分区存储,要读取2023-12-01至2024-01-31的数据,最佳方式是结合分区剪枝(Partition Pruning)和行级过滤,避免加载全量数据到内存。

实现代码

import pandas as pd

# 定义目标时间范围
start_ts = pd.Timestamp("2023-12-01")
end_ts = pd.Timestamp("2024-01-31")

# 读取指定分区并过滤精确时间范围
target_df = pd.read_parquet(
    "output_parquet",
    filters=[
        # 先过滤分区:只加载2023年12月、2024年1月的分区文件
        ("year", "in", [2023, 2024]),
        ("month", "in", [12, 1]),
        # 再在文件内过滤timestamp的精确范围
        ("timestamp", ">=", start_ts),
        ("timestamp", "<=", end_ts)
    ]
)

为什么这样高效?

  1. 分区剪枝:pandas会先扫描output_parquet下的分区目录,只加载符合year=2023/month=12和year=2024/month=1的Parquet文件,跳过其他无关分区,大幅减少需要读取的文件数量。
  2. 行级过滤:Parquet是列式存储且自带行组统计信息,读取时会跳过不包含目标时间范围的行组,无需加载分区内的所有数据。

注意事项

  • 确保timestamp列在写入时是datetime类型,pandas读取时会自动保留该类型,避免字符串解析的性能损耗。
  • 如果使用pandas 2.0以下版本,filters参数对timestamp的直接过滤可能不支持,可先读取分区数据,再用布尔索引过滤时间范围:
    # 旧版pandas兼容写法
    target_df = pd.read_parquet(
        "output_parquet",
        filters=[("year", "in", [2023, 2024]), ("month", "in", [12, 1])]
    )
    target_df = target_df[(target_df["timestamp"] >= start_ts) & (target_df["timestamp"] <= end_ts)]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:23:14