使用 PyArrow 增强 Pandas

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验将指导你学习如何在 pandas 中使用 PyArrow,以扩展功能并提高各种 API 的性能。PyArrow 为 pandas 提供了更广泛的数据类型、对所有数据类型的缺失数据支持、IO 读取器集成以及与其他数据框库的互操作性。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

安装 PyArrow

在开始之前,请确保你已安装了最低支持版本的 PyArrow。你可以通过在 Python 环境中运行以下命令来完成此操作:

## 这是一条注释
## 使用 pip 安装 PyArrow
pip install pyarrow

数据结构集成

PyArrow 允许 pandas 数据结构直接由 PyArrow ChunkedArray 支持,类似于 NumPy 数组。以下是实现方法:

## 导入 pandas
import pandas as pd

## 使用 PyArrow 数据类型创建一个 pandas Series、Index 和 DataFrame
ser = pd.Series([-1.5, 0.2, None], dtype="float32[pyarrow]")
idx = pd.Index([True, None], dtype="bool[pyarrow]")
df = pd.DataFrame([[1, 2], [3, 4]], dtype="uint64[pyarrow]")

使用带参数的 PyArrow 类型

对于接受参数的 PyArrow 类型,你可以将带有这些参数的 PyArrow 类型传入 ArrowDtype,以便在 dtype 参数中使用。

## 导入 PyArrow
import pyarrow as pa

## 使用 PyArrow 列表类型创建一个 pandas Series
list_str_type = pa.list_(pa.string())
ser = pd.Series([["hello"], ["there"]], dtype=pd.ArrowDtype(list_str_type))

将 PyArrow 数组转换为 pandas 数据结构

如果你有一个 PyArrow 数组或分块数组(ChunkedArray),可以将其转换为 pandas 数据结构,如 Series、Index 或 DataFrame。

## 创建一个 PyArrow 数组
pa_array = pa.array([{"1": "2"}, {"10": "20"}, None], type=pa.map_(pa.string(), pa.string()))

## 将 PyArrow 数组转换为 pandas Series
ser = pd.Series(pd.arrays.ArrowExtensionArray(pa_array))

PyArrow 操作

PyArrow 数据结构集成是通过 pandas 的 ExtensionArray 接口实现的。在该接口集成到 pandas API 的地方,就存在支持的功能。

## 使用 PyArrow 数据类型创建一个 pandas Series
ser = pd.Series([-1.545, 0.2, None], dtype="float32[pyarrow]")

## 执行各种操作
ser.mean()
ser + ser
ser > (ser + 1)
ser.dropna()
ser.isna()
ser.fillna(0)

使用 PyArrow 读取数据

PyArrow 提供了已集成到多个 pandas IO 读取器中的 IO 读取功能。

## 导入 IO 模块
import io

## 创建一个 StringIO 对象
data = io.StringIO("""a,b,c\n1,2.5,True\n3,4.5,False""")

## 使用 PyArrow 作为引擎将数据读入 pandas DataFrame
df = pd.read_csv(data, engine="pyarrow")

总结

在本实验中,我们探讨了如何将 PyArrow 与 pandas 一起使用,以扩展其功能并提高性能。我们学习了如何将 pandas 数据结构转换为 PyArrow 数据类型并执行各种操作。我们还了解了如何使用 PyArrow 的 IO 读取功能读取数据。