使用 Pandas read_parquet 读取 Parquet 文件

2023-10-18

The read_parquet函数于Pandas允许您将 Parquet 文件读入数据框.

它提供了从本地文件路径或 URL 读取 Parquet 文件的功能。它的多功能性还不止于此。该函数提供了几个额外的选项来加载和处理文件中的数据。

 

 

什么是 Parquet 文件?

Parquet,也称为 Apache Parquet,是一种面向列的数据存储格式,针对大型数据集进行了优化 - 它可以最大限度地减少文件大小,同时最大限度地提高查询数据时的效率。

Parquet 还被设计为一种自描述文件格式。模式嵌入在数据中,这使得数据的读写更加灵活和健壮。
Parquet 文件不是纯文本,它们是二进制文件。

Parquet 文件的优点之一是它们可以包含许多不同类型的数据,包括复杂的嵌套结构,并且可以有效地处理数据压缩和编码方案。
现在,让我们创建一个 Parquet 文件作为本教程中使用的示例数据:


import pandas as pd
data = {
    'Name': ['John', 'Anna', 'Peter', 'Linda'],
    'Age': [28, 24, 35, 32],
    'City': ['New York', 'Paris', 'Berlin', 'London']
}
df = pd.DataFrame(data)
df.to_parquet('people.parquet')
  

上面的代码创建一个数据框来自示例数据,然后使用以下命令将 DataFrame 转换为名为“people.parquet”的 Parquet 文件to_parquet功能。

 

语法和参数

使用的语法read_parquet函数如下:


pandas.read_parquet(path, engine='auto', columns=None, **kwargs)
  

现在我们来分解一下这些参数:

  1. path:表示从中读取 parquet 文件的文件路径或 URL 的字符串。本地和远程(通过有效的 URL 方案)文件都可以访问。
  2. engine:用于读取文件的引擎。选项为“auto”、“pyarrow”或“fastparquet”。 “auto”让 Pandas 决定使用哪个引擎。
  3. columns:如果不是“无”,则只会从文件中读取这些列。如果您只需要特定的列,这可以显着优化读取过程。
  4. kwargs:传递给引擎的额外选项。有关这些选项的更多信息,请查看相应引擎的文档。

例如,PyArrow 支持其他选项,例如memory_map and buffer_size.

The memory_mapoption是一个布尔值,指定是否使用mmap,一种内存映射文件读取的方法,在某些场景下可以提高性能。

The buffer_size设置读取缓冲区的大小,如果使用得当,它也会影响读取性能。
The read_parquet函数返回一个DataFrame对象,其中包含从文件中读取的数据。

 

如何使用 Pandas 读取 Parquet 文件

您可以使用以下命令读取 Parquet 文件read_parquet函数通过将镶木地板文件传递给函数,如下所示:


import pandas as pd
df = pd.read_parquet('people.parquet')
print(df)
  

Output:


    Name  Age      City
0   John   28  New York
1   Anna   24     Paris
2  Peter   35    Berlin
3  Linda   32    London
  

在此示例中,该函数读取文件并返回一个 DataFrame。
索引 (0, 1, 2, 3) 由 Pandas 自动生成。

 

了解不同的发动机选项

正如我们之前讨论的,read_parquet函数支持两种引擎:PyArrow 和 fastparquet。

要使用它们,您需要先安装它们:


pip install fastparquet pyarrow  

要在读取 Parquet 文件时指定引擎,您可以将其作为参数传递,如下所示:


import pandas as pd
df_pyarrow = pd.read_parquet('people.parquet', engine='pyarrow')
df_fastparquet = pd.read_parquet('people.parquet', engine='fastparquet')
print('Using PyArrow')
print(df_pyarrow)
print('Using fastparquet')
print(df_fastparquet)
  

Output:


Using PyArrow
    Name  Age      City
0   John   28  New York
1   Anna   24     Paris
2  Peter   35    Berlin
3  Linda   32    London
Using fastparquet
    Name  Age      City
0   John   28  New York
1   Anna   24     Paris
2  Peter   35    Berlin
3  Linda   32    London
  

在这些示例中,我们指定用于读取 Parquet 文件的引擎。虽然结果数据相同,但性能可能存在差异。

让我们衡量一下:


import pandas as pd
import time

start_time = time.time()
df_pyarrow = pd.read_parquet('people.parquet', engine='pyarrow')
end_time = time.time()
pyarrow_time = end_time - start_time
print('Time taken using PyArrow: {} seconds'.format(pyarrow_time))

start_time = time.time()
df_fastparquet = pd.read_parquet('people.parquet', engine='fastparquet')
end_time = time.time()
fastparquet_time = end_time - start_time
print('Time taken using fastparquet: {} seconds'.format(fastparquet_time))
  

Output:


Time taken using PyArrow: 0.0388336181640625 seconds
Time taken using fastparquet: 0.12515997886657715 seconds
  

结果是从 Parquet 文件中读取 4 条记录和 3 列。

 

指定要加载的列

The read_parquet函数还允许您指定从 Parquet 文件加载哪些列。当处理具有许多列的大型数据集时,这尤其有用。
您可以通过将列名列表传递给columns的参数read_parquet功能:


import pandas as pd
df = pd.read_parquet('people.parquet', columns=['Name', 'Age'])
print(df)
  

Output:


    Name  Age
0   John   28
1   Anna   24
2  Peter   35
3  Linda   32
  

在此示例中,我们仅从 Parquet 文件加载“Name”和“Age”列。从输出中可以看到,生成的 DataFrame 仅包含这两列。

 

使用分区的 Parquet 文件

分区是一种根据一个或多个列的值将数据拆分到多个文件的技术。

该技术可以显着加快查询和数据加载速度,因为它限制了需要扫描的数据量。

每个分区将表示为输出目录中的单独子目录,每个子目录中的文件名将反映分区列的值。

例如,如果您根据“年”和“月”列对数据进行分区,则文件名将遵循以下结构:


partitioned_people/
    └── year=2021/
        └── month=01/
            ├── part.0.parquet
            ├── part.1.parquet
            └── ...
    └── year=2021/
        └── month=02/
            ├── part.0.parquet
            ├── part.1.parquet
            └── ...
    └── ...
  

在此示例中,每个子目录代表“年”和“月”值的唯一组合。在每个子目录中,您将找到包含与该分区对应的数据的 Parquet 文件。

当读取分区的 Parquet 数据时,Pandasread_parquet将目录中的每个文件视为一个单独的 DataFrame,然后将它们连接成一个大的 DataFrame。
以下是读取分区数据的方法:


import pandas as pd
df = pd.read_parquet('partitioned_people')
print(df)
  

The read_parquet函数将自动检测分区方案并从子目录中的所有 Parquet 文件中读取数据。生成的数据帧(df在上面的示例中)将包含所有分区的合并数据。

 

进一步阅读

https://pandas.pydata.org/docs/reference/api/pandas.read_parquet.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Pandas read_parquet 读取 Parquet 文件 的相关文章

  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • Pyqt-如何因另一个组合框数据而更改组合框数据?

    我有一个表 有 4 列 这 4 列中的两列是关于功能的 一个是特征 另一个是子特征 在每一列中 所有单元格都有组合框 我可以在这些单元格中打开txt 我想 当我选择电影院作为功能时 我只想看到子功能组合框中的电影名称 而不是我的 数据 中的
  • Python 是解释型的还是编译型的,或者两者兼而有之?

    据我了解 An 解释的语言是由解释器 将高级语言转换为机器代码然后执行的程序 实时运行和执行的高级语言 它一次处理一点程序 A compiled语言是一种高级语言 其代码首先由编译器 将高级语言转换为机器代码的程序 转换为机器代码 然后由执
  • 使用 NLTK 在 Python 中获取大量名词(或形容词);或 Python Mad Libs

    Like 这个问题 https stackoverflow com questions 7439555 noun adjective etc word lists or dictionaries common words 我有兴趣按词性获取
  • 将二维数组放入 Pandas 系列中

    我有一个 2D Numpy 数组 我想将其放入 pandas 系列 而不是 DataFrame 中 gt gt gt import pandas as pd gt gt gt import numpy as np gt gt gt a np
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • 小部件之间的自定义信号

    尝试将信号从一个 gtk EventBox 子级发送到另一个 在 init HeadMode 第 75 行 上出现错误 类型错误 未知信号名称 消息发送 why usr bin env python coding utf8 import p
  • 如何在Python中高效地添加稀疏矩阵

    我想知道如何在Python中有效地添加稀疏矩阵 我有一个程序 可以将大任务分解为子任务 并将它们分配到多个 CPU 上 每个子任务都会产生一个结果 一个 scipy 稀疏矩阵 格式为 lil matrix 稀疏矩阵尺寸为 100000x50
  • 使用 Python 计算 Spark 中成对 (K,V) RDD 中每个 KEY 的平均值

    我想与 Python 共享这个特定的 Apache Spark 解决方案 因为它的文档非常贫乏 我想通过 KEY 计算 K V 对 存储在 Pairwise RDD 中 的平均值 示例数据如下所示 gt gt gt rdd1 take 10
  • ValueError:不支持连续[重复]

    这个问题在这里已经有答案了 我正在使用 GridSearchCV 进行线性回归的交叉验证 不是分类器也不是逻辑回归 我还使用 StandardScaler 对 X 进行标准化 我的数据框有 17 个特征 X 和 5 个目标 y 观察 约11
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • Pandas:如何将数据框插入 Clickhouse

    我正在尝试将 Pandas 数据框插入 Clickhouse 这是我的代码 import pandas import sqlalchemy as sa uri clickhouse default localhost default ch
  • 在相同任务上,Keras 比 TensorFlow 慢

    我正在使用 Python 运行斩首 DCNN 本例中为 Inception V3 来获取图像特征 我使用的是 Anaconda Py3 6 和 Windows7 使用 TensorFlow 时 我将会话保存在变量中 感谢 jdehesa 并
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • Python Django-如何从输入文件标签读取文件?

    我不想将文件保存在我的服务器上 我只想在下一页中读取并打印该文件 现在我有这个 index html
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • 在 Spyder 的变量资源管理器中查看局部变量

    我是 python 新手 正在使用 Spyder 的 IDE 我欣赏它的一项功能是它的变量资源管理器 然而 根据一些研究 我发现它只显示全局变量 我找到的解决方法是使用检查模块 import inspect local vars def m
  • 通过 Web 界面执行 python 单元测试

    是否可以通过 Web 界面执行单元测试 如果可以 如何执行 EDIT 现在我想要结果 对于测试 我希望它们是自动化的 可能每次我对代码进行更改时 抱歉我忘了说得更清楚 EDIT 这个答案此时已经过时了 Use Jenkins https j
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这

随机推荐

  • 如何显示 MySQL 中所有数据库的列表

    给药时MySQL对于数据库服务器 您要做的最常见的任务之一就是熟悉环境 这涉及诸如列出驻留在服务器上的数据库等任务 显示表格特定数据库的信息或获取有关用户帐户及其权限的信息 本教程介绍如何通过命令行显示 MySQL 或 MariaDB 服务
  • 如何创建 Tar Gz 文件

    tar 存档是一个存储其他文件集合的文件 包括有关这些文件的信息 例如所有权 权限和时间戳 在 Linux 操作系统中 您可以使用tar创建 tar 档案的命令 该命令还可以使用各种压缩程序来压缩档案 其中 gzip 是最流行的算法 按照约
  • 如何在 Ubuntu 20.04 上安装 GCC (build-essential)

    GNU 编译器集合 GCC 是 C C Objective C Fortran Ada Go D 编程语言 很多开源项目 包括Linux内核和GNU工具 都是使用GCC编译的 本文介绍如何在 Ubuntu 20 04 上安装 GCC 在 U
  • 如何在 Debian 9 上安装和使用 FFmpeg

    FFmpeg 是一个免费的开源命令行工具 用于对多媒体文件进行转码 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率以
  • 如何在 Ubuntu 18.04 上安装 Python 3.7

    Python 是世界上最流行的编程语言之一 凭借其简单易学的语法 Python 是初学者和经验丰富的开发人员的绝佳选择 Python 是一种非常通用的编程语言 它可以用作脚本语言来构建游戏 开发网站 创建机器学习算法和分析数据 Python
  • 如何在 CentOS 7 上安装 VLC 媒体播放器

    VLC 是一种流行的开源多媒体播放器和流媒体服务器 它是跨平台的 几乎可以播放所有多媒体文件以及 DVD 音频 CD 和不同的流媒体协议 本教程介绍如何在 CentOS 7 上安装 VLC 媒体播放器 先决条件 您需要以以下身份登录具有 s
  • 如何在 Ubuntu 20.04 上安装和使用 FFmpeg

    FFmpeg 是一个用于处理多媒体文件的免费开源工具集合 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率 捕获流音频
  • Linux 睡眠命令(暂停 Bash 脚本)

    sleep是一个命令行实用程序 允许您将调用进程挂起指定的时间 换句话说 sleep命令将下一个命令的执行暂停给定的秒数 The sleep该命令在 bash shell 脚本中使用时非常有用 例如 在重试失败的操作或在循环内时 在本教程中
  • 如何在 Ubuntu 18.04 上安装 CouchDB

    CouchDB 是由 Apache 软件基金会维护的免费开源容错 NoSQL 数据库 CouchDB 服务器将其数据存储在命名数据库中 其中包含以下文档JSON结构 每个文档由许多字段和附件组成 字段可以包括文本 数字 列表 布尔值等 它包
  • 如何在 Debian 10 上安装 Xrdp 服务器(远程桌面)

    Xrdp 是 Microsoft 远程桌面协议 RDP 的开源实现 允许您以图形方式控制远程系统 使用 RDP 您可以登录到远程计算机并创建真实的桌面会话 就像登录到本地计算机一样 本教程介绍如何在 Debian 10 Linux 上安装和
  • 如何使用SFTP命令传输文件

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密的 SSH 传输访问 管理和传输文件 与传统的相比FTPSFTP 提供 FTP 的所有功能 但更安全且更易于配置 Unlike SCPSFTP 仅支持文件传输 但允许您对远程文
  • 15+ yum update 命令示例

    Yum 是 Red Hat CentOS 和其他操作系统上使用的包管理器Linux 发行版使用 RPM 包管理器 Yum 用于安装 更新 删除或以其他方式操作这些 Linux 系统上安装的软件包 在本教程中 我们将介绍 yum update
  • Seaborn barplot 教程(以条形图可视化您的数据)

    数据可视化已成为与分析数据进行交流的重要阶段 通过数据可视化 数据科学家和业务分析师可以轻松地从大量数据中提取见解 Seaborn 是一种 Python 中的统计图形绘图和可视化库 允许数据分析师和数据科学专业人员呈现可视化 在本文中 我们
  • 15 个 Linux 读取命令示例

    The readLinux 中的命令允许您从标准输入或文件中读取输入 它允许您接收数据并将其分配给变量 本教程将指导您完成不同的选项read命令 目录 hide 1 读取用户的输入 2 从文件中读取输入 3 指定分隔符
  • 创建和使用动态 Laravel 子域路由

    许多网站为用户的个人资料或页面提供了一个自定义子域 因此用户可以通过 http username website com 访问他的个人资料 这要好得多 在这篇文章中 我们将了解如何高效地进行动态 Laravel 子域路由 配置DNS 要做到
  • 使用 Pandas read_html 函数读取 HTML 表格

    您可以使用read html直接从网站抓取 HTML 表格并将其转换为数据框 它简化了从网页提取数据的过程 The read html函数接受一个包含 URL 或指向 HTML 文件的文件路径的字符串 提取该 HTML 页面中包含的所有表
  • Python SQLite3教程(数据库编程)

    在本教程中 我们将使用 Python 以编程方式使用 SQLite3 数据库 一般来说 SQLite 是一种无服务器数据库 您可以在包括 Python 在内的几乎所有编程语言中使用它 无服务器意味着无需安装单独的服务器即可使用 SQLite
  • Linux iptables 防火墙简化示例

    在上一篇文章中 我们讨论了如何使用强化最佳实践保护 Linux 服务器 有人问我防火墙部分 里面简单介绍了iptables防火墙 今天我们就来详细讨论一下Linux iptables 防火墙以及如何使用出色的防火墙来保护您的服务器流量 目录
  • Bash For 循环:Linux 中的迭代指南

    Bash 中的 for 循环是重要的控制结构 用于脚本编写重复任务 它们提供多次执行一系列命令 循环范围 变量 命令输出等的能力 这个综合教程将带您了解在 Bash 中使用 for 循环的各种方法 从基本语法到更高级的主题 例如嵌套循环和动
  • 使用 Pandas read_parquet 读取 Parquet 文件

    The read parquet函数于Pandas允许您将 Parquet 文件读入数据框 它提供了从本地文件路径或 URL 读取 Parquet 文件的功能 它的多功能性还不止于此 该函数提供了几个额外的选项来加载和处理文件中的数据 目录