自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

當(dāng)Excel遇到大數(shù)據(jù)問題,是時候用Python來拯救了

開發(fā) 后端
Excel能做很多事情;當(dāng)涉及到更大的數(shù)據(jù)集時,這簡直是一種痛苦。如果有一種簡單的方法,那就是將數(shù)據(jù)傳輸?shù)絊QL數(shù)據(jù)庫中進(jìn)行分析。這就是Python拯救世界的方式。

與從事分析工作的人交談,他們會告訴你他們對Excel的愛恨情仇:

Excel能做很多事情;當(dāng)涉及到更大的數(shù)據(jù)集時,這簡直是一種痛苦。數(shù)據(jù)需要很長時間才能加載,在你意識到機(jī)器的內(nèi)存耗盡之前,整個事情就變得無法管理了。更不用說Excel最多只能支持1,048,576行。

如果有一種簡單的方法,那就是將數(shù)據(jù)傳輸?shù)絊QL數(shù)據(jù)庫中進(jìn)行分析。這就是Python拯救世界的方式。

當(dāng)Excel遇到大數(shù)據(jù)問題,是時候用Python來拯救了

Python中的SQL

首先,讓我們研究一下在Python中使用SQL時最流行的選項(xiàng):MySQL和SQLite。

MySQL有兩個流行的庫:PyMySQL和MySQLDb;而SQLite有SQLite3。

SQLite就是所謂的嵌入式數(shù)據(jù)庫,這意味著它在我們的應(yīng)用程序中運(yùn)行,因此不需要先在某個地方安裝它(不像MySQL)。

這是一個重要的區(qū)別;在我們尋求快速數(shù)據(jù)分析的過程中起著關(guān)鍵作用。因此,我們將繼續(xù)學(xué)習(xí)如何使用SQLite。

在Python中設(shè)置SQLite

我們需要做的第一件事是導(dǎo)入庫:

  1. import sqlite3 

然后,我們需要確定是否要在任何地方保存這個數(shù)據(jù)庫,還是在應(yīng)用程序運(yùn)行時將它保存在內(nèi)存中。

如果決定通過導(dǎo)入任何數(shù)據(jù)來實(shí)際保存數(shù)據(jù)庫,那么我們必須給數(shù)據(jù)庫一個名稱,例如' FinanceExplainedDb ',并使用以下命令:

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

另一方面,如果我們想把整個東西保存在內(nèi)存中,并在完成后讓它消失,我們可以使用以下命令:

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

至此,SQLite已經(jīng)全部設(shè)置好,可以在Python中使用了。假設(shè)我們在Table 1中加載了一些數(shù)據(jù),我們可以用以下方式執(zhí)行SQL命令:

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

現(xiàn)在讓我們探索如何通過使用pandas的應(yīng)用程序使數(shù)據(jù)可用。

使用pandas加載數(shù)據(jù)

假設(shè)我們已經(jīng)有了數(shù)據(jù),我們想要進(jìn)行分析,我們可以使用Pandas庫來做這件事。

首先,我們需要導(dǎo)入pandas庫,然后我們可以加載數(shù)據(jù):

  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') 

一旦我們加載數(shù)據(jù),我們可以把它直接放入我們的SQL數(shù)據(jù)庫與一個簡單的命令:

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

如果在同一個表中加載多個文件,可以使用if_exists參數(shù):

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

在處理較大的數(shù)據(jù)集時,我們將無法使用這個單行命令來加載數(shù)據(jù)。我們的應(yīng)用程序?qū)⒑谋M內(nèi)存。相反,我們必須一點(diǎn)一點(diǎn)地加載數(shù)據(jù)。在這個例子中,我們假設(shè)每次加載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'

把所有的東西放在一起

為了將所有內(nèi)容綜合起來,我們提供一個Python腳本,它涵蓋了我們討論的大部分內(nèi)容。

  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() 

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2012-12-24 10:58:50

大數(shù)據(jù)大數(shù)據(jù)產(chǎn)業(yè)布局大數(shù)據(jù)全球技術(shù)峰會

2017-01-13 10:33:39

華為大數(shù)據(jù)

2013-07-26 11:17:34

AdTime游戲大數(shù)據(jù)

2009-06-19 18:00:05

HibernateSpring

2011-10-11 15:42:54

大數(shù)據(jù)數(shù)據(jù)庫

2014-09-17 09:50:07

OpenSOC大數(shù)據(jù)

2015-09-11 20:16:46

CAAPM應(yīng)用性能

2018-09-26 20:01:17

金融大數(shù)據(jù)數(shù)據(jù)平臺

2015-07-10 15:31:42

ITIoT物聯(lián)網(wǎng)

2024-06-18 13:32:08

2012-07-24 09:16:19

郵箱技巧

2014-03-31 14:53:46

大數(shù)據(jù)

2015-01-07 15:49:21

大數(shù)據(jù)SSD

2016-10-26 08:49:38

2015-09-18 15:22:56

DCIMITSM

2013-12-03 10:05:00

大數(shù)據(jù)

2015-08-27 13:24:59

招聘

2020-10-29 11:28:23

大數(shù)據(jù)足球技術(shù)

2024-09-18 09:00:40

2021-04-24 16:35:37

AI 數(shù)據(jù)人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號