【问题标题】:Pandas : Reading first n rows from parquet file?熊猫:从镶木地板文件中读取前 n 行?
【发布时间】:2019-05-27 17:10:50
【问题描述】:

我有一个 parquet 文件,我想先将文件中的 n 行读入 pandas 数据框。 我尝试了什么:

df = pd.read_parquet(path= 'filepath', nrows = 10)

它不起作用并给了我错误:

TypeError: read_table() got an unexpected keyword argument 'nrows'

我也尝试了 skiprows 参数,但这也给了我同样的错误。

或者,我可以读取完整的 parquet 文件并过滤前 n 行,但这需要更多的计算,我想避免。

有什么方法可以实现吗?

【问题讨论】:

标签: python pandas parquet


【解决方案1】:

在探索并与pandas开发团队取得联系后,发现pandas在读取parquet文件时不支持nrowsskiprows参数。

原因是 pandas 使用pyarrowfastparquet parquet 引擎来处理 parquet 文件,而pyarrow 不支持部分读取文件或通过跳过行读取文件(不确定fastparquet)。以下是pandas github上issue的链接供大家讨论。

https://github.com/pandas-dev/pandas/issues/24511

【讨论】:

    【解决方案2】:

    接受的答案已过期。现在可以只将 parquet 文件的前几行读取到 pandas 中,尽管它有点混乱并且依赖于后端。

    要使用 PyArrow 作为后端阅读,请按照以下说明操作:

    from pyarrow.parquet import ParquetFile
    import pyarrow as pa 
    
    pf = ParquetFile('file_name.pq') 
    first_ten_rows = next(pf.iter_batches(batch_size = 10)) 
    df = pa.Table.from_batches([first_ten_rows]).to_pandas() 
    

    更改行 batch_size = 10 以匹配您要读取的行数。

    【讨论】:

    • 而且速度也很快(1m 行 x 2k 列需要 10 秒)
    【解决方案3】:

    Parquet 文件是面向列的存储,专为此设计...所以加载所有文件以访问一行是正常的。

    【讨论】:

    猜你喜欢
    • 2022-11-24
    • 2023-02-19
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2021-04-25
    • 2022-11-03
    • 2017-01-22
    相关资源
    最近更新 更多