pd.read_parquet 详细使用说明

张开发
2026/4/17 7:24:17 15 分钟阅读

分享文章

pd.read_parquet 详细使用说明
pd.read_parquet 详细使用说明pd.read_parquet是 pandas 中用于读取 Parquet 格式文件的函数。Parquet 是一种列式存储格式在大数据场景下性能优异。下面详细介绍其常用参数重点说明过滤条件的使用。基本语法importpandasaspd dfpd.read_parquet(path,# 文件路径engineauto,# 引擎选择columnsNone,# 指定读取的列filtersNone,# 过滤条件 ⭐重点storage_optionsNone,# 存储选项**kwargs# 其他传递给引擎的参数)核心参数详解参数类型说明pathstr/Path文件路径支持本地路径或URLhttp、ftp、s3、gs等enginestr解析引擎‘auto’默认、‘pyarrow’、‘fastparquet’。推荐使用’pyarrow’性能更好且支持行级过滤columnslist指定要读取的列名列表只加载这些列可大幅减少内存占用filtersList[Tuple] 或 List[List[Tuple]]过滤条件在读取时进行数据过滤filters 过滤条件详解语法格式# 基本格式每个条件是 (列名, 操作符, 值)filters[(column,op,value),...]# 复杂格式支持 AND/OR 组合filters[[(col1,op1,val1),(col2,op2,val2)],...]# 内层 AND外层 OR支持的操作符操作符说明示例,等于(date, , 2024-01-01)大于(price, , 100)大于等于(volume, , 10000)小于(change, , 0)小于等于(pe, , 30)!不等于(industry, !, 金融)in包含于(ts_code, in, [000001, 000002])not in不包含于(status, not in, [ST, *ST])过滤逻辑规则过滤条件的逻辑遵循析取范式DNF内层列表元组之间是AND与关系外层列表各组之间是OR或关系[[条件A, 条件B], [条件C, 条件D]] 等价于(条件A AND 条件B) OR (条件C AND 条件D)过滤条件示例示例1单个条件# 读取价格大于100的行dfpd.read_parquet(data.parquet,filters[(price,,100)])示例2多个条件AND关系# 读取价格大于100且成交量大于10000的行filters[(price,,100),(volume,,10000)]dfpd.read_parquet(data.parquet,filtersfilters)示例3多个条件组OR关系# 读取 金融行业 或 科技行业 的数据filters[[(industry,,金融)],[(industry,,科技)]]dfpd.read_parquet(data.parquet,filtersfilters)示例4复合条件# 读取 (金融行业且PE15) 或 (科技行业且PE30) 的数据filters[[(industry,,金融),(pe,,15)],[(industry,,科技),(pe,,30)]]dfpd.read_parquet(data.parquet,filtersfilters)示例5日期范围过滤# 读取2024年1月的数据filters[(trade_date,,2024-01-01),(trade_date,,2024-01-31)]dfpd.read_parquet(data.parquet,filtersfilters)示例6使用in操作符# 读取指定股票列表的数据stock_list[000001.SZ,000002.SZ,600000.SH]filters[(ts_code,in,stock_list)]dfpd.read_parquet(data.parquet,filtersfilters)重要注意事项1. 引擎影响过滤效果使用pyarrow引擎时支持行级过滤真正只加载符合条件的行数据可显著减少内存和IO使用fastparquet引擎时仅在分区级别过滤可能加载部分不符合条件的行# 推荐显式指定 pyarrow 引擎以获得行级过滤dfpd.read_parquet(data.parquet,enginepyarrow,filters[(price,,100)])2. 过滤不是万能的filters参数的主要作用是减少读取的数据量但不能完全替代数据加载后的精确过滤。建议先用filters粗筛减少数据量再用 DataFrame 的查询方法如.query()或布尔索引进行精确过滤# 推荐的两阶段过滤dfpd.read_parquet(data.parquet,filters[(date,,2024-01-01)])resultdf[df[price]100]# 二次精确过滤3. 列名和数据类型列名必须与文件中的列名完全匹配区分大小写值的数据类型应与列的数据类型一致# 数值列用数值字符串列用字符串filters[(price,,100.0),(ts_code,,000001.SZ)]其他实用参数columns 参数只读取指定列大幅减少内存使用# 只读取需要的列dfpd.read_parquet(data.parquet,columns[ts_code,trade_date,close,volume])组合使用 columns 和 filters# 先过滤行再选择列效率最高dfpd.read_parquet(data.parquet,columns[ts_code,close,volume],# 只读需要的列filters[(trade_date,,2024-01-01),# 行过滤(trade_date,,2024-12-31)])

更多文章