作为数据分析工作者,我们每天都要处理大量数据,这时Pandas等工具的读取性能也就备受关注。特别是当数据集达到百万行以上时,如何提高读取效率,让数据分析工作跑上“快车道”?本文将详细分析Pandas读取大数据的性能优化方法,以及一些建议和经验。
1. 使用SQL进行预处理
可以通过SQL先过滤和筛选出需要的字段和数据,然后再读取到Pandas。这可以最大限度减少读取的数据量,加快读取速度。
2. 设置chunksize
在读取数据时指定chunksize参数,这会将数据分块读取到Pandas,而不是将整个数据集载入内存。例如:
data = pd.read_sql_query(sql, engine1, chunksize=100000)
这会每次读取10万行数据到Pandas。这可以大大减少内存使用,防止内存溢出。
3. 指定index_col
指定index_col参数可以跳过某一列的数据读取,这能减少读取的数据量,提高速度。
4. 采用pandas.read_sql_table而非read_sql_query
read_sql_table方法可以更快速高效的读取SQL数据库表到Pandas。因此,如果是读取整个表的数据,建议使用此方法。
5. 设置row_chunk
与chunksize相似,但本参数指定的是每次读取的行数。这也能分块读取数据,减少内存消耗,加快速度。
6. 选择更快的读取方式
可以尝试使用其他更快的读取方式,如:
- MySQL -> pymysql
- Postgres -> psycopg2
- SQL Server -> pymssql
这些库的读取性能会优于纯Pandas读取方法。
7. 减少列的读取
在SQL查询中仅选择需要的列,避免读取无关列的数据。这也可以显著减少读取的数据量,优化性能。
8. 使用数据分析环境
可以考虑使用更强大的数据分析环境,如PySpark。其分布式计算能力会大大优于Pandas在单机上操作大数据集。
导
读
:从常见的Excel和CSV到JSON及各种
数据
库,
Pandas
几乎支持市面上所有的主流
数据
存储形式。作者:李庆辉来源:大
数据
DT(ID:hzdashuju)
Pandas
提供了一组顶层的I/O API,如
pandas
.read_csv()等方
法
,这些方
法
可以将众多格式的
数据
读
取到DataFrame
数据
结构中,经过分析处理后,再通过类似DataFrame.to_csv(...
使用
python
读
取mysql
数据
库
数据
,介绍pymysql的用
法
、参数使用注意事项、以及
读
取decimal类型
数据
时出现默认转化成float丢失精度的问题。
通过使用
Pandas
的 read_csv 函数,chunksize 参数,query 函数和 groupby 函数,您可以轻松地
读
取,过滤,分组和聚合大
数据
集。如果您是
数据
科学或机器学习的从业者,学习如何使用
Pandas
处理大
数据
集是非常重要的技能之一。如果您正在使用
Python
,您会发现
Pandas
是一种非常流行的
数据
分析库,可以轻松处理大
数据
集。如果您需要对大
数据
集中的
数据
进行分组和聚合,则可以使用
Pandas
的 groupby 函数。
Pandas
作为
数据
分析的屠龙宝刀,毫不夸张的说,功能和优势都极其强大。像是支持GB
数据
处理,多样的
数据
清洗方
法
;支持多种开源可视化工具包,更加丰富的
数据
成果展示等等。因此如果能做好
性能优化
,就可以极大的提高
Pandas
的运行速度。本文为大家总结了四大优化
Pandas
性能的方
法
,感兴趣的朋友就赶紧看下去吧!
read_sql()的中的参数介绍
read_sql(sql,con,index_col=‘None’,coerce_float=‘True’,params=‘None’,parse_dates=‘None’,columns=‘None’,chunksize:None=‘None’)
read_sql方
法
是
pandas
中用来在
数据
库中执行指定的SQL语句查询或对指定的整张表进行查询,以DataFrame 的类型返回查询结果.
其中各参数意义如下:
sql:需要执行的sql语句
con:连接
数据
库所需的eng
小弟的需求需要在多个
数据
库之间查询
数据
并关联,所以小弟选择了使用
pandas
,通过read_sql
读
取
数据
至dataframe加工后直接生成目标
数据
。但是目前遭遇了一个问题:read_sql的速度非常慢,例如,在oracle库中
读
取37W
数据
量(22个字段)的表至dataframe耗时需要4分半。代码如下:import
pandas
as pdimport sqlalchemy as sqlora...
这篇笔记测试Mysql、
Pandas
、
Python
列表的大
数据
查询性能。
手中有一张72万余行的
数据
库表,借此机会测试三者的
数据
查询性能,终于解决内心疑问。
测试环境:Ubuntu 20.04 LTS,
Python
3.8.2, Intel® Core™ i7-8750H CPU @ 2.20GHz × 12
原
数据
有8列,724100行,sql文件大小 65.5 MB
数据
表第8列为时间,下面用三种方
法
分别按时间降序,记录每种方
法
的用时(每种方
法
测试3次,取平均值)
2. 安装 PyMySQL 库
PyMySQL 库是用于连接 MySQL 服务器的一个库,对应的是
Python
3.x 的版本,如果是
Python
2 要使用 MySqlDb 库。我们在使用 PyMySQL 之前要确保已经安装了该模块,下面我们介绍一下如
pandas
是一个强大而灵活的
Python
包,它可以让你处理带有标签和时间序列的
数据
。
pandas
提供了一系列的函数来
读
取不同类型的文件,并返回一个DataFrame对象,这是
pandas
的核心
数据
结构,它可以让你方便地对
数据
进行分析和处理。函数名以read_开头,后面跟着文件的类型,例如read_csv()表示
读
取CSV文件函数的第一个参数是文件的路径或者类似文件的对象,例如read_csv("data.csv")表示
读
取data.csv文件,read_csv(url)表示从网址
读
取
数据
。
在一个CSV文件中往往存在很多列
数据
,但并不是所有的列都是我们需要的,此时如果将所有的列都
读
取出来,无疑会减慢
数据
读
取速度。)竞赛平台上寻找一些
数据
集来练习,但是发现部分
数据
集是几G甚至几十G的,如图1所示。当刚刚得到一个很大的CSV文件时,迫切想了解
数据
的情况,此时推荐使用DataFrame对象的head()方
法
和tail()方
法
,先查看前5行
数据
和最后5行
数据
。说明:head()方
法
和tail()方
法
默认是查看5行
数据
,如果想查看更多的
数据
可以指定行数,如head(20),查看前20行
数据
。
详情可点击datatable_library[1]。
除此之外,还有一些其他技巧可以在一定程度上帮助我们解决
pandas
的内存问题。它们可能不是最佳的解决方案,但这些技巧有时很方便。而且,了解一下它们对你也没有坏处,对吧?在我之前的一篇文章中,我谈到了两种在
pandas
中加载大型
数据
集[2]的方
法
。
这两个技巧分别是:
分块:将
数据
集细