Python读取大型数据文件的6种方式汇总
作者:Python 发布时间:2021-06-29 12:19:33
在数据科学和机器学习中,我们通常会处理大量的数据,这些数据可能会超过计算机的内存限制,因此我们需要一种方法来读取大型数据文件。
在 Python 中,我们可以使用多种方法读取大型数据文件。本文将介绍如何使用 Python 读取大型数据文件的几种方法。
1.读取大型文本文件
在 Python 中,我们可以使用文件对象的迭代器来读取大型文本文件。
这种方法可以一次读取文件中的一行,然后处理它。
with open('large_file.txt') as f:
for line in f:
# 处理每一行
在这个示例中,我们打开一个名为 large_file.txt
的文件,并使用 with
语句来确保在使用完文件后正确关闭它。
然后,我们使用 for
循环迭代文件对象,并使用 line
变量来存储每个行。我们可以在循环中处理每一行,例如对每一行进行拆分或计算。
这种方法可以处理非常大的文本文件,因为它只读取一行,并在处理完毕后释放内存。
2.读取二进制文件
如果我们处理的是二进制文件,如图像或视频文件,我们可以使用 Python 的 memory-mapped
文件。
这种方法将文件映射到内存中,从而使我们可以像访问内存一样访问文件。
import mmap
with open('large_binary_file.bin', 'r+b') as f:
mmapped_file = mmap.mmap(f.fileno(), 0)
# 对 mmapped_file 进行操作
mmapped_file.close()
在这个示例中,我们打开一个名为 large_binary_file.bin
的二进制文件,并使用 mmap.mmap
函数将其映射到内存中。
我们可以像访问内存一样访问文件,例如使用 mmapped_file[0]
来访问文件的第一个字节。在处理完文件后,我们需要关闭文件以释放内存。
3.使用 Pandas 读取大型数据文件
Pandas 是 Python 中最流行的数据处理库之一,它提供了一种称为 read_csv
的函数,可以读取大型 CSV 文件并将其转换为 Pandas DataFrame。
import pandas as pd
# 读取 CSV 文件
df = pd.read_csv('large_data.csv', iterator=True, chunksize=1000)
for chunk in df:
# 对每个 chunk 进行处理
在这个示例中,我们使用 read_csv
函数读取一个名为 large_data.csv
的 CSV 文件,并将其转换为 Pandas DataFrame。我们将 iterator
参数设置为 True
,以便将文件分块读取。
然后,我们使用 chunksize
参数将文件分成大小为 1000 的块,并将其迭代到 for
循环中。在循环中,我们可以使用 Pandas DataFrame 的函数来处理每个块。
4.使用 Dask 读取大型数据文件
Dask 是另一个流行的 Python 库,可以处理大型数据集。它提供了一种称为 dask.dataframe
的函数,可将大型数据集分成多个块,并在每个块上执行操作。
import dask.dataframe as dd
# 读取 CSV 文件
df = dd.read_csv('large_data.csv')
# 对数据集进行操作
result = df.groupby('column_name').mean()
# 将结果保存到文件
result.to_csv('result.csv')
在这个示例中,我们使用 dask.dataframe
函数读取一个名为 large_data.csv
的 CSV 文件,并将其转换为 Dask DataFrame。
我们可以像处理 Pandas DataFrame 一样处理 Dask DataFrame,例如使用 groupby
函数对数据集进行分组并计算平均值。
最后,我们使用 to_csv
函数将结果保存到文件。
5.使用 Hadoop 读取大型数据文件
如果我们需要处理非常大的数据集,我们可以使用 Hadoop 分布式计算框架。Hadoop 可以将大型数据集分成多个块,并在多个计算机上并行处理。
我们可以使用 Python 的 hdfs
库来读取和写入 Hadoop 文件系统中的文件。
from hdfs import InsecureClient
client = InsecureClient('http://localhost:50070')
# 读取文件
with client.read('/path/to/large_file.txt', encoding='utf-8') as reader:
for line in reader:
# 对每一行进行处理
在这个示例中,我们使用 hdfs
库连接到 Hadoop 文件系统,并使用 read
函数读取文件。
我们可以像处理本地文件一样处理 Hadoop 文件系统中的文件,例如使用 for
循环迭代文件的每一行。
如果需要写入文件,则可以使用 client.write
函数将数据写入文件。
6.使用 PySpark 读取大型数据文件
PySpark 是 Python 中的 Spark API,它可以并行处理大型数据集。我们可以使用 PySpark 读取和处理大型数据文件。
from pyspark.sql import SparkSession
# 创建 SparkSession 对象
spark = SparkSession.builder.appName('LargeFile').getOrCreate()
# 读取 CSV 文件
df = spark.read.csv('large_data.csv', header=True, inferSchema=True)
# 对数据集进行操作
result = df.groupby('column_name').mean()
# 将结果保存到文件
result.write.csv('result.csv')
在这个示例中,我们首先创建了一个名为 SparkSession
的对象。然后,我们使用 read.csv
函数读取一个名为 large_data.csv
的 CSV 文件,并将其转换为 PySpark DataFrame。
我们可以像处理 Pandas DataFrame 一样处理 PySpark DataFrame,例如使用 groupby
函数对数据集进行分组并计算平均值。
最后,我们使用 write.csv
函数将结果保存到文件。
来源:https://mp.weixin.qq.com/s/1LcWeXuFthwyDf9Rv4AC5A


猜你喜欢
- 方法一: 在给出的输入CD-KEY(序列号)的界面中,输入你已经安装的windows server 2003 的CD-KEY(序列号)即可以
- 1.算法:对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换;然后从K2
- 本文总结了YiiFramework入门知识点。分享给大家供大家参考,具体如下:创建Yii应用骨架web为网站根目录yiic webapp /
- 一、问题描述最近遇到一个问题,也就是使用分区表进行数据查询/加载的时候比普通表的性能下降了约50%,主要瓶颈出现在CPU,既然是CPU瓶颈理
- 什么是事务?事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。数据库事务通常包含了一个序列的对数据库的读/写操作
- sqlite3 - SQLite 数据库SQLite 是一款轻量级、无需安装、零配置的嵌入式关系数据库。Python 自带 sql
- LCase:转成小写 UCase:转成大写 下面是ASP中的代码,可以直接演示效果的。 代码如下:<% dim s
- 1.substring_index函数的语法及其用法(1)语法:substring_index(string,sep,num)即substr
- 如何使用ADO 2x Command 对象读取数据?具体的读数据代码如下:Cmd = CType(EC.Example1
- 1.说明:复制表(只复制结构,源表名:a 新表名:b)SQL: select * into b&nb
- 一、提要python的@property是python的一种装饰器,是用来修饰方法的。python @property 装饰器使一个方法可以
- 在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章
- 对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎。如果你要使用全文索引,那必须使用myisam。 INNODB的实
- 迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法。1 算法原理迪杰斯特拉(Dijks
- 简述公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交
- Python是一门高级编程语言,其拥有多种循环方式,如for循环、while循环、do-while循环等。在编写程序时,需要根据不同的场景和
- 1 数据准备1.1 新建数据表CREATE TABLE `player` ( `id` bigint(20) NOT NULL
- vim有各种强大的插件,这不仅归功于其提供的用来编写插件的脚本语言vimL,还得益于它良好的接口实现,从而支持python等语言编写插件。当
- 朋友的网站要计算机票的折扣价格,并且在最后的折扣价格上应对个位进行四舍五入,同时在ASP和Javasc
- 记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项。单个文件的读操作:我们先假设一个需求如下:读取一个t