如何用Python來(lái)拯救Excel遇到大數(shù)據(jù)問(wèn)題

本篇文章為大家展示了如何用Python來(lái)拯救Excel遇到大數(shù)據(jù)問(wèn)題,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是專業(yè)的上思網(wǎng)站建設(shè)公司,上思接單;提供成都網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行上思網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

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

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

Python中的SQL

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

MySQL有兩個(gè)流行的庫(kù):PyMySQL和MySQLDb;而SQLite有SQLite3。

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

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

在Python中設(shè)置SQLite

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

import sqlite3

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

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

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

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

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

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

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

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

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

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

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

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

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

df.to_sql(name='Table1', con=conn)

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

df.to_sql(name='Table1', con=conn, if_exists='append')

在處理較大的數(shù)據(jù)集時(shí),我們將無(wú)法使用這個(gè)單行命令來(lái)加載數(shù)據(jù)。我們的應(yīng)用程序?qū)⒑谋M內(nèi)存。相反,我們必須一點(diǎn)一點(diǎn)地加載數(shù)據(jù)。在這個(gè)例子中,我們假設(shè)每次加載10,000行:

chunksize = 10000 for chunk in pd.read_csv('ourfile.csv', chunksizechunksize=chunksize):     chunk.to_sql(name='Table1', con=conn, if_exists='append')

把所有的東西放在一起

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

import sqlite3, pandas as pd, numpy as np #####Creating test data for us -- you can ignore from sklearn import datasets iris = datasets.load_iris() df1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target']) df1.to_csv('TestData.csv',index=False) ########################### conn = sqlite3.connect(':memory:') cur = conn.cursor() chunksize = 10 for chunk in pd.read_csv('TestData.csv', chunksizechunksize=chunksize):     chunkchunk.columns = chunk.columns.str.replace(' ', '_') #replacing spaces with underscores for column names     chunk.to_sql(name='Table1', con=conn, if_exists='append') cur.execute('SELECT * FROM Table1') names = list(map(lambda x: x[0], cur.description)) #Returns the column names print(names) for row in cur:     print(row) cur.close()

上述內(nèi)容就是如何用Python來(lái)拯救Excel遇到大數(shù)據(jù)問(wèn)題,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

名稱欄目:如何用Python來(lái)拯救Excel遇到大數(shù)據(jù)問(wèn)題
本文地址:http://muchs.cn/article6/phogig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣建站公司響應(yīng)式網(wǎng)站、App設(shè)計(jì)網(wǎng)站設(shè)計(jì)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)