read_feather
是一种读取羽毛格式(从路径)并返回路径中的对象的方法。
当借助 读取羽毛文件时read_feather
,羽毛格式之前的数据将存储在 Pandas 数据帧中。
在阅读羽毛格式对象之前,让我们首先了解什么是羽毛及其优点。
什么是羽毛?
Feather 格式是一种快速、轻量且易于使用的二进制存储格式。
Feather使用Arrow IPC格式来存储数据帧。
通过使用Arrow IPC格式,Feather提供了一种通用的数据交换格式,可用于在不同的编程语言和工具之间共享数据。当使用不同语言的多个工具时,这种机制可能会派上用场。
这意味着使用具有不兼容格式的羽毛格式会返回not an arrow file
错误。因此,我们需要确保数据采用所需的格式。
羽毛格式的特点
羽毛格式有一些特点使其得到广泛应用。
- 羽毛格式是如此之快
- 它是一种轻量级的数据存储结构
- 它与语言无关,这意味着它与语言无关并且可以在不同语言之间互换
- 它用于临时存储目的
- 使用feather时要记住的一件事是它不支持嵌套数据类型列
优点
- 羽毛格式便于携带
- 这意味着它可以在多种语言中使用,无需任何麻烦
- 使用 Feather 格式进行读写速度非常快
先决条件
羽毛图书馆
在我们对 Feather 格式进行任何操作之前,我们需要确保它已安装在我们的系统中。这可以通过执行一个简单的命令来完成。
pip install feather-format
安装了feather格式后,我们可以使用它来获得更快的结果。
pyarrow
必须安装一个重要的库才能使用羽毛格式。
PyArrow 库的使用主要是因为它支持 Arrow Apache 数据格式。
以下是安装该库的方法。
pip install pyarrow |
探索 Pandas.read_feather 的语法
Pandas 库提供多种数据存储格式的读写。
其语法pandas.read_feather
如下:
pandas.read_feather(path, columns = None , use_threads = True , storage_options = None ) |
下面给出了一些重要的参数。
数字 | 范围 | 描述 | 类型/默认值 | 需求性 |
1 | 小路 | 路径对象应该是一个字符串 也可以是一个 URL 有效的 URL 方案包括 http、FTP、s3 和 file 对于文件 URL,必须指定主机名 例如,file://localhost/path/to/table.feather 。这里,主机是localhost |
斯特 | 必需的 |
2 | 列 | 读取选定的列 如果未提供,则读取所有列 |
序列 默认值=无 |
必需的 |
3 | 使用线程 | 该参数指示是否使用多个线程并行读取文件 | 布尔 默认=True |
必需的 |
4 | 存储选项 | 传递到存储连接的额外选项,例如主机、端口、用户名、密码等 对于 http URL,键值对将作为 urllib.request.Request 标头选项转发 |
字典 | 选修的 |
read_feather
返回类型:返回文件中存储的对象的类型。
示例 1:写入数据帧并将其作为输入传递给 read_feather
在此示例中,让我们看看将数据帧传递为羽毛格式。
我们还将借助 NumPy 来生成记录数组。
代码如下。
1
2
3
4
5
6
7
8
9
10
|
#Example 1 import pandas as pd import numpy as np #generating hundreds of rows using numpy a = np.random.randn( int ( 1e6 )) cols = {f 'column_{i}' : a for i in range ( 10 )} df = pd.DataFrame(cols) df.to_feather( 'test_df.feather' ) df = pd.read_feather( 'test_df.feather' ) df |
让我们逐行浏览一下代码。
在第一行中,我们导入 Pandas 库及其别名 pd。此步骤是强制性的,因为我们将使用的方法是该库的一部分。
接下来,我们将 NumPy 库导入为 np. 该库用于创建我们将要使用的数组。
a=np.random.randn(int(1e6))
:此行用于使用random
NumPy 库的函数创建 100 万个随机生成的数据。
cols = {f'column_{i}': a for i in range(10)}
:这一行创建一个名为 cols 的字典。该字典借助 range 函数在 10 列中存储一百万个数字。该数据框的名称为 cols。数据以键值对格式存储。
在下一步中,我们将这些键值对转换为数据框。
我们的目标是读取羽毛格式。但我们拥有的只是一个数据框。我们应该将此数据框转换为羽毛格式。这可以使用 来完成df.to_feather
。我们将存储羽毛格式的新文件是 test_df.feather。
现在我们要做的就是使用 读取此格式pd.read_feather
。
接下来,我们在最后一行打印该文件的一个实例。
输出如下所示。
示例 2:从路径中读取 Feather 文件。
我们将看到根据语法读取feather文件。
本示例中使用的数据集是 Feather 格式的 AMEX-Default Prediction。
该数据集主要用于根据之前的数据来预测新客户的信用卡未来是否会违约。
这是代码:
1
2
3
4
|
#Example2 import pandas as pd df = pd.read_feather( '/content/drive/MyDrive/train.feather' ) df |
让我们分解一下代码。
在第二行中,我们导入用于读取feather文件的Pandas库。
在下一行中,我们调用一个新变量 df 来读取和存储 Feather 文件。
接下来,我们打印 df 中的数据。
输出是如下所示的数据框。
从图像中可以看出,很明显数据有很多 NaN 值。
让我们看看阅读花费了多少时间。我们可以用它%timeit
来检查所花费的时间。
一行代码如下:
% timeit pd.read_feather( '/content/drive/MyDrive/train.feather' ) |
示例 3:read_csv、read_feather和read_parquet的比较
让我们看看 CSV、feather 和 parquet 之间的比较。
我们将从示例 1 中获取数据帧,并将其读取为 CSV 文件和 parquet 文件,并比较结果 read_feather
以查看哪个更快。
读取csv
df.to_csv( 'test_df.gzip.csv' , compression = 'gzip' ) % timeit df = pd.read_csv( 'test_df.gzip.csv' , compression = 'gzip' ) |
因此,在第一行中,我们使用 将第一个示例中获得的数据帧转换为 CSV to_csv
。使用的压缩模式用于降低大文件的维数。
查看这篇关于如何在 Python 中将 DataFrame 保存为 CSV 文件的文章。
接下来,我们使用%timeit模块来检查读取CSV格式数据的时间。
这是输出。
如您所见,读取 CSV 格式的时间约为 3 秒。
读羽毛
让我们检查一下读取羽毛格式需要多长时间。
这是代码。
1
2
3
|
df.to_feather( 'test_df.feather' ) df1 = pd.read_feather( 'test_df.feather' ) % timeit df1 = pd.read_feather( 'test_df.feather' ) |
to_feather
我们采用第一个示例中创建的数据框,并将其转换为第一行中使用的羽毛格式。
接下来,我们创建一个名为 df1 的新变量来使用 读取羽化对象pd.read_feather
。
最后,我们使用 %timeit 模块来检查读取 Feather 格式的数据帧所花费的时间。
如上所示,读取羽毛格式需要几毫秒。
读镶木地板
让我们检查一下将数据帧读取为 parquet 文件需要多长时间。
如果您不熟悉 Parquet 格式,请参阅这篇关于 Pandas read_parquet 的文章。
这是代码。
1
2
|
df.to_parquet( 'test_df.parquet' ) % timeit pd.read_parquet( 'test_df.parquet' ) |
这df.to_parquet
是一种用于将数据帧转换为镶木地板格式的方法。该文件的名称是 test_df.parquet。
在下一行中,我们将这行代码传递给 %timeit 模块来检查读取时间。
读取 parquet 格式的数据帧只花了 91.8 毫秒。
以下是 CSV、feather 和 parquet 的整体比较。
从上图可以看出,羽毛格式是读取任何数据帧的更快方法。
结论
总结我们在这篇文章中学到的内容,
我们已经了解了什么是羽毛格式,它的特点,以及它的内部存储机制和优点。
我们还观察了如何安装两个主要的重要功能库来处理 Feather 格式 – PyArrow 和 Feather 库。
接下来,我们探索了 read_feather 的语法并详细了解了它的所有参数。
来看说明性示例,我们已经了解了如何使用 Numpy 库的随机函数生成数据帧并将其作为参数传递给 read_feather。
接下来,我们获取羽毛数据集并将其加载为路径。
我们还看到了使用 timeit 模块来检查读取时间。
最后,我们比较了 CSV、Feather 和 Parquet 的读取时间,结果表明 Feather 格式胜出!