当Excel遇到大数据问题,是时候用Python来拯救了

开发 后端
Excel能做很多事情;当涉及到更大的数据集时,这简直是一种痛苦。如果有一种简单的方法,那就是将数据传输到SQL数据库中进行分析。这就是Python拯救世界的方式。

与从事分析工作的人交谈,他们会告诉你他们对Excel的爱恨情仇:

Excel能做很多事情;当涉及到更大的数据集时,这简直是一种痛苦。数据需要很长时间才能加载,在你意识到机器的内存耗尽之前,整个事情就变得无法管理了。更不用说Excel最多只能支持1,048,576行。

如果有一种简单的方法,那就是将数据传输到SQL数据库中进行分析。这就是Python拯救世界的方式。

当Excel遇到大数据问题,是时候用Python来拯救了

Python中的SQL

首先,让我们研究一下在Python中使用SQL时最流行的选项:MySQL和SQLite。

MySQL有两个流行的库:PyMySQL和MySQLDb;而SQLite有SQLite3。

SQLite就是所谓的嵌入式数据库,这意味着它在我们的应用程序中运行,因此不需要先在某个地方安装它(不像MySQL)。

这是一个重要的区别;在我们寻求快速数据分析的过程中起着关键作用。因此,我们将继续学习如何使用SQLite。

在Python中设置SQLite

我们需要做的第一件事是导入库:

  1. import sqlite3 

然后,我们需要确定是否要在任何地方保存这个数据库,还是在应用程序运行时将它保存在内存中。

如果决定通过导入任何数据来实际保存数据库,那么我们必须给数据库一个名称,例如' FinanceExplainedDb ',并使用以下命令:

  1. dbname = 'FinanceExplainedDb' 
  2. conn = sqlite3.connect(dbname + '.sqlite') 

另一方面,如果我们想把整个东西保存在内存中,并在完成后让它消失,我们可以使用以下命令:

  1. conn = sqlite3.connect(':memory:') 

至此,SQLite已经全部设置好,可以在Python中使用了。假设我们在Table 1中加载了一些数据,我们可以用以下方式执行SQL命令:

  1. cur = conn.cursor() 
  2. cur.execute('SELECT * FROM Table1') 
  3. for row in cur: 
  4.     print(row) 

现在让我们探索如何通过使用pandas的应用程序使数据可用。

使用pandas加载数据

假设我们已经有了数据,我们想要进行分析,我们可以使用Pandas库来做这件事。

首先,我们需要导入pandas库,然后我们可以加载数据:

  1. import pandas as pd 
  2. #if we have a csv file 
  3. df = pd.read_csv('ourfile.csv') 
  4. #if we have an excel file 
  5. df = pd.read_excel('ourfile.xlsx') 

一旦我们加载数据,我们可以把它直接放入我们的SQL数据库与一个简单的命令:

  1. df.to_sql(name='Table1'con=conn

如果在同一个表中加载多个文件,可以使用if_exists参数:

  1. df.to_sql(name='Table1'con=connif_exists='append'

在处理较大的数据集时,我们将无法使用这个单行命令来加载数据。我们的应用程序将耗尽内存。相反,我们必须一点一点地加载数据。在这个例子中,我们假设每次加载10,000行:

  1. chunksize = 10000 
  2. for chunk in pd.read_csv('ourfile.csv', chunksizechunksize=chunksize): 
  3.     chunk.to_sql(name='Table1'con=connif_exists='append'

把所有的东西放在一起

为了将所有内容综合起来,我们提供一个Python脚本,它涵盖了我们讨论的大部分内容。

  1. import sqlite3, pandas as pd, numpy as np 
  2. #####Creating test data for us -- you can ignore 
  3. from sklearn import datasets 
  4. iris = datasets.load_iris() 
  5. df1 = pd.DataFrame(datanp.c_[iris['data'], iris['target']], columnsiris['feature_names'] + ['target']) 
  6. df1.to_csv('TestData.csv',index=False
  7. ########################### 
  8. conn = sqlite3.connect(':memory:') 
  9. cur = conn.cursor() 
  10. chunksize = 10 
  11. for chunk in pd.read_csv('TestData.csv', chunksizechunksize=chunksize): 
  12.     chunkchunk.columns = chunk.columns.str.replace(' ', '_') #replacing spaces with underscores for column names 
  13.     chunk.to_sql(name='Table1'con=connif_exists='append'
  14. cur.execute('SELECT * FROM Table1') 
  15. names = list(map(lambda x: x[0], cur.description)) #Returns the column names 
  16. print(names) 
  17. for row in cur: 
  18.     print(row) 
  19. cur.close() 

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2017-01-13 10:33:39

华为大数据

2012-12-24 10:58:50

大数据大数据产业布局大数据全球技术峰会

2013-07-26 11:17:34

AdTime游戏大数据

2009-06-19 18:00:05

HibernateSpring

2011-10-11 15:42:54

大数据数据库

2014-09-17 09:50:07

OpenSOC大数据

2015-09-11 20:16:46

CAAPM应用性能

2018-09-26 20:01:17

金融大数据数据平台

2024-06-18 13:32:08

2015-07-10 15:31:42

ITIoT物联网

2012-07-24 09:16:19

邮箱技巧

2014-03-31 14:53:46

大数据

2015-01-07 15:49:21

大数据SSD

2016-10-26 08:49:38

2015-09-18 15:22:56

DCIMITSM

2013-12-03 10:05:00

大数据

2015-08-27 13:24:59

招聘

2020-10-29 11:28:23

大数据足球技术

2017-08-04 09:58:42

大数据信息化CIO

2016-03-17 13:47:36

点赞
收藏

51CTO技术栈公众号