Pandas读取feather文件时如何限制读取的行数?
解决Feather文件读取限制行数的方案
pandas 内置的 read_feather 确实没有提供类似 read_hdf 的 stop 参数,你可以通过以下两种方案实现需求:
方案1:使用pyarrow底层接口(轻量首选)
pandas 读写feather本身依赖pyarrow库,你可以直接调用pyarrow的FeatherReader接口,无需额外安装依赖:
单row group场景(绝大多数默认导出的feather都是该类型)
import pyarrow.feather as feather import pandas as pd # 仅加载元数据,不会读取全量文件内容 reader = feather.FeatherReader("df.ftr") # 直接读取前100万行转成DataFrame df = reader.read_row_group(0, limit=1000000).to_pandas()
多row group场景
如果你的feather文件是分多个行组存储的,可以按行组累计读取直到凑够目标行数:
import pyarrow.feather as feather import pandas as pd reader = feather.FeatherReader("df.ftr") target_rows = 1000000 collected = 0 df_parts = [] for rg_idx in range(reader.num_row_groups): current_rg_rows = reader.get_row_group(rg_idx).num_rows if collected + current_rg_rows <= target_rows: # 读取整行组 df_parts.append(reader.get_row_group(rg_idx).to_pandas()) collected += current_rg_rows else: # 仅读取剩余需要的行数 need_rows = target_rows - collected df_parts.append(reader.read_row_group(rg_idx, limit=need_rows).to_pandas()) break # 合并为完整DataFrame df = pd.concat(df_parts, ignore_index=True)
方案2:使用Dask分批读取(适合大数据处理场景)
如果平时有大规模数据处理需求,可以用Dask框架实现,代码更简洁:
import dask.dataframe as dd # Dask读取feather时仅生成计算逻辑,不会加载全量数据 ddf = dd.read_feather("df.ftr") # 取前100万行转为pandas DataFrame df = ddf.head(1000000, npartitions=-1)
注:该方案需要提前安装dask库,执行
pip install dask即可。
内容的提问来源于stack exchange,提问作者Marioanzas
相关产品推荐
相关产品推荐

