【python】pyarrow.parquet+pandas:读取及使用parquet文件

这篇具有很好参考价值的文章主要介绍了【python】pyarrow.parquet+pandas:读取及使用parquet文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  Parquet是一种用于列式存储压缩数据的文件格式,广泛应用于大数据处理和分析中。Python提供了多个库来处理Parquet文件,例如pyarrow和fastparquet。
  本文将介绍如何使用pyarrow.parquet+pandas库操作Parquet文件。

一、前言

1. 所需的库

import pyarrow.parquet as pq
import pandas as pd

  pyarrow.parquet模块,可以读取和写入Parquet文件,以及进行一系列与Parquet格式相关的操作。例如,可以使用该模块读取Parquet文件中的数据,并转换为pandas DataFrame来进行进一步的分析和处理。同时,也可以使用这个模块将DataFrame的数据保存为Parquet格式。

2. 终端指令

conda create -n DL python==3.11
conda activate DL
conda install pyarrow

pip install pyarrow

二、pyarrow.parquet

  当使用pyarrow.parquet模块时,通常的操作包括读取和写入Parquet文件,以及对Parquet文件中的数据进行操作和转换。以下是一些常见的使用方法:

1. 读取Parquet文件

import pyarrow.parquet as pq

parquet_file = pq.ParquetFile('file.parquet')
data = parquet_file.read().to_pandas()
  • 使用pq.ParquetFile打开Parquet文件;
  • 使用read().to_pandas()方法将文件中的数据读取为pandas DataFrame

2. 写入Parquet文件

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['a', 'b', 'c']})
table = pa.Table.from_pandas(df)

pq.write_table(table, 'output.parquet')
  • 将pandas DataFrame转换为Arrow的Table格式;
  • 使用pq.write_table方法将Table写入为Parquet文件。
parquet_file = pq.ParquetFile('output.parquet')
data = parquet_file.read().to_pandas()
print(data)

pyarrow parquet,# Python,python,pandas,开发语言,parquet

3. 对数据进行操作

import pyarrow.parquet as pq

# 读取Parquet文件
parquet_file = pq.ParquetFile('output.parquet')
data = parquet_file.read().to_pandas()

# 对数据进行筛选和转换
filtered_data = data[data['col1'] > 1]  # 筛选出col1大于1的行
print(filtered_data)
transformed_data = filtered_data.assign(col3=filtered_data['col1'] * 2)  # 添加一个新列col3,值为col1的两倍

# 打印处理后的数据
print(transformed_data)

pyarrow parquet,# Python,python,pandas,开发语言,parquet

4. 导出数据为csv

import pyarrow.parquet as pq
import pandas as pd

parquet_file = pq.ParquetFile('output.parquet')
data = parquet_file.read().to_pandas()

df = pd.DataFrame(data)
csv_path = './data.csv'
df.to_csv(csv_path)
print(f'数据已保存到 {csv_path}')

pyarrow parquet,# Python,python,pandas,开发语言,parquet

三、实战

1. 简单读取

import pyarrow.parquet as pq
import pandas as pd

parquet_file = pq.ParquetFile('./train_parquet/part-00014-918feee1-1ad5-4b08-8876-4364cc996930-c000.snappy.parquet')
data = parquet_file.read().to_pandas()

df = pd.DataFrame(data)
csv_path = './data2.csv'
df.to_csv(csv_path)
print(f'数据已保存到 {csv_path}')

关于PyCharm调试操作可参照:PyCharm基础调试功能详解

pyarrow parquet,# Python,python,pandas,开发语言,parquet
点击右侧蓝色的View as DataFrame
pyarrow parquet,# Python,python,pandas,开发语言,parquet

  如图所示,feature在同一个格内,导出为:
pyarrow parquet,# Python,python,pandas,开发语言,parquet
注意看,省略号...位置真的就是省略号字符,没有数字,即

[0.27058824 0.         0.05882353 ... 0.47843137 0.36862745 0.97647059]

2. 数据操作(分割feature)

import pyarrow.parquet as pq
import pandas as pd

parquet_file = pq.ParquetFile('./train_parquet/part-00014-918feee1-1ad5-4b08-8876-4364cc996930-c000.snappy.parquet')
data = parquet_file.read().to_pandas()

# 将feature列中的列表拆分成单独的特征值
split_features = data['feature'].apply(lambda x: pd.Series(x))

# 将拆分后的特征添加到DataFrame中
data = pd.concat([data, split_features], axis=1)
print(data.head(2))
# 删除原始的feature列
data = data.drop('feature', axis=1)

# 保存到csv文件
csv_path = './data1.csv'
data.to_csv(csv_path, index=False)

print(f'数据已保存到 {csv_path}')

  • 调试打开:
    pyarrow parquet,# Python,python,pandas,开发语言,parquet
  • excel打开:
    pyarrow parquet,# Python,python,pandas,开发语言,parquet
  • 文件大小对比
    pyarrow parquet,# Python,python,pandas,开发语言,parquet

部分内容援引自博客:使用python打开parquet文件

3. 迭代方式来处理Parquet文件

  如果Parquet文件非常大,可能会占用大量的内存。在处理大型数据时,建议使用迭代的方式来处理Parquet文件,以减少内存的占用。以下是一种更加内存友好的方式来处理Parquet文件:

import pyarrow.parquet as pq
import pandas as pd
import time

start_time = time.time()  # 记录开始时间

# 使用迭代器迭代读取Parquet文件中的数据
data_iterator = pq.ParquetFile(
    './train_parquet/part-00014-918feee1-1ad5-4b08-8876-4364cc996930-c000.snappy.parquet').iter_batches(batch_size=100)

# 初始化空的DataFrame用于存储数据
data = pd.DataFrame()

# 逐批读取数据并进行处理
for batch in data_iterator:
    # 将RecordBatch转换为Pandas DataFrame
    df_batch = batch.to_pandas()

    # 将feature列中的列表拆分成单独的特征值
    split_features = df_batch['feature'].apply(lambda x: pd.Series(x))

    # 将拆分后的特征添加到DataFrame中
    df_batch = pd.concat([df_batch, split_features], axis=1)

    # 将处理后的数据追加到DataFrame中
    data = data._append(df_batch, ignore_index=True)

# 删除原始的feature列
data = data.drop('feature', axis=1)

# 保存到csv文件
csv_path = './data3.csv'
data.to_csv(csv_path, index=False)

end_time = time.time()  # 记录结束时间
print(f'数据已保存到 {csv_path}')
print(f'总运行时间: {end_time - start_time} 秒')

输出:文章来源地址https://www.toymoban.com/news/detail-832459.html

数据已保存到 ./data3.csv
总运行时间: 4.251184940338135

4. 读取同一文件夹下多个parquet文件

import os
import pyarrow.parquet as pq
import pandas as pd
import time

start_time = time.time()  # 记录开始时间

folder_path = './train_parquet/'
parquet_files = [f for f in os.listdir(folder_path) if f.endswith('.parquet')]

# 初始化空的DataFrame用于存储数据
data = pd.DataFrame()

# 逐个读取Parquet文件中的数据并进行处理
for file in parquet_files:
    file_path = os.path.join(folder_path, file)
    data_iterator = pq.ParquetFile(file_path).iter_batches(batch_size=1024)

    for batch in data_iterator:
        # 将RecordBatch转换为Pandas DataFrame
        df_batch = batch.to_pandas()

        # 将feature列中的列表拆分成单独的特征值
        split_features = df_batch['feature'].apply(lambda x: pd.Series(x))

        # 将拆分后的特征添加到DataFrame中
        df_batch = pd.concat([df_batch, split_features], axis=1)

        # 将处理后的数据追加到DataFrame中
        data = data._append(df_batch, ignore_index=True)

# 删除原始的feature列
data = data.drop('feature', axis=1)

# 保存到csv文件
csv_path = './data.csv'
data.to_csv(csv_path, index=False)

end_time = time.time()  # 记录结束时间
print(f'数据已保存到 {csv_path}')
print(f'总运行时间: {end_time - start_time} 秒')

到了这里,关于【python】pyarrow.parquet+pandas:读取及使用parquet文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python,Pandas读取csv文件gbk编码和utf-8编码都报错

    用Pandas读取csv文件,read_csv(),使用默认的 encoding = ‘utf-8’ 和 encoding = ‘gbk’ 都报错,如下图。最终通过 统一编码方式 解决了,操作很简单,但是问题解决的探索过程并不是特别顺利,所以记录一下,给朋友们参考~ 统一编码方式,将csv文件的编码格式改为utf-8。 具体操作

    2024年01月16日
    浏览(66)
  • Python[parquet文件 转 json文件]

    Parquet是一种高效的列式存储格式,而JSON是一种常见的数据交换格式。我们将使用pandas和pyarrow库来实现这个转换过程,并且提供相关的代码示例。 首先,请确保您已经安装了pandas和pyarrow库。如果尚未安装,可以在命令行中执行以下命令: 读取Parquet文件 我们假设您已经有一

    2024年02月16日
    浏览(37)
  • python 爬虫热身篇 使用 requests 库通过 HTTP 读取网络数据,使用 pandas 读取网页上的表格,使用 Selenium 模拟浏览器操作

    在过去,收集数据是一项繁琐的工作,有时非常昂贵。机器学习项目不能没有数据。幸运的是,我们现在在网络上有很多数据可供我们使用。我们可以从 Web 复制数据来创建数据集。我们可以手动下载文件并将其保存到磁盘。但是,我们可以通过自动化数据收集来更有效地做

    2023年04月08日
    浏览(67)
  • 【Python】使用pandas将数据写入excel文件中

    本文主要简单介绍一下使用python的pandas库来将数据写入到excel文件中。 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。在命令行输入pip install pandas进行安装即可,如果安装不成功,有安装Pycharm的小伙伴也可以进入python interpreter界面,搜索pand

    2024年02月15日
    浏览(54)
  • python&Pandas二:数据读取与写入

    Pandas提供了各种函数和方法来实现数据读取和写入的操作。下面我将详细介绍Pandas中常用的数据读取和写入的方法。 数据读取: 从CSV文件读取:可以使用 pd.read_csv() 函数来读取CSV文件,并将其转换为DataFrame对象。 从Excel文件读取:可以使用 pd.read_excel() 函数来读取Excel文件,

    2024年02月03日
    浏览(50)
  • 【pandas】Python读取DataFrame的某行或某列

    行索引(index) :对应最左边那一竖列 列索引(columns) :对应最上面那一横行 .loc[]官方释义: Access a group of rows and columns by label(s) or a boolean array.(通过标签或布尔数组访问一组行和列) 官方链接 loc使用索引来取值,基础用法 df.loc[[行索引],[列索引]] .iloc[]官方释义: Purely inte

    2024年02月08日
    浏览(39)
  • 【python】【pandas】读取DataFrame的某一列形成一个列表

    输出结果: 在上述代码中,我们创建了一个示例DataFrame df ,其中包含三列(\\\'A\\\'、\\\'B\\\'、\\\'C\\\'),每列都有一些示例值。 然后,我们使用 df.iloc[:, 1] 来访问DataFrame的第一列。这里的 iloc[:, 1] 表示选择所有行(使用 : ),并选择索引为1的列(即第二列)。 接下来,我们使用 tolist

    2024年02月11日
    浏览(44)
  • 如何使用pandas读取csv文件中的某一列数据

    使用pandas读取csv文件中的某一列数据,可以这样做: 先导入pandas模块: import pandas as pd 使用 pd.read_csv 函数读取csv文件: df = pd.read_csv(\\\"文件名.csv\\\") 使用 df[\\\"列名\\\"] 读取某一列数据: column = df[\\\"列名\\\"] 例如,如果你有一个csv文件叫做 example.csv ,并且有一列叫做 age ,你可以这样

    2024年02月13日
    浏览(45)
  • 【Python】使用Python读取JSON文件中的内容

    在自动化测试过程中,会将部分数据保存到JSON文件中。 JSON文件有以下特点: JSON是存储和交换文本信息的语法,类似XML。 JSON比XML更小、更快、更易解析 JSON是轻量级的文本数据交换格式。 JSON是轻量级的文本数据交换格式。 JSON独立于语言 JSON具有自我描述性、更易理解。

    2024年02月13日
    浏览(49)
  • Python中的pyarrow入门

    目录 Python中的pyarrow入门 简介 安装 基本操作 创建和访问数组 读写文件 转换数据类型 处理大型数据集 高级操作 结论 实际应用场景示例:数据分析和可视化 PyArrow的缺点 类似的库 PyArrow是一个Python库,用于在Apache Arrow格式下高效处理大规模数据集。它提供了跨平台、高性能

    2024年03月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包