python快速導(dǎo)入數(shù)據(jù)庫用哪個 Python使用Pandas讀取數(shù)據(jù)庫很慢,應(yīng)該如何提速?
Python使用Pandas讀取數(shù)據(jù)庫很慢,應(yīng)該如何提速?謝謝你邀請我!熊貓編程庫是數(shù)據(jù)科學(xué)社區(qū)的天賜之物。無論你問哪個數(shù)據(jù)科學(xué)家,他們是如何用Python處理他們的數(shù)據(jù)集的,他們無疑都會談到熊貓。P
Python使用Pandas讀取數(shù)據(jù)庫很慢,應(yīng)該如何提速?
謝謝你邀請我!
熊貓編程庫是數(shù)據(jù)科學(xué)社區(qū)的天賜之物。無論你問哪個數(shù)據(jù)科學(xué)家,他們是如何用Python處理他們的數(shù)據(jù)集的,他們無疑都會談到熊貓。
Pandas是一個偉大的編程庫的縮影。:簡單、直觀、多才多藝。
但是,要把數(shù)據(jù)科學(xué)家的熊貓數(shù)據(jù)框架計算上千次甚至上百萬次,仍然是一個挑戰(zhàn)。你可以 不要只是在編寫Python for循環(huán)語句時輸入數(shù)據(jù),并期望在合理的時間內(nèi)處理數(shù)據(jù)。
Pandas被設(shè)計為一次處理整個行或列的矢量化,在每個單元格、行或列中循環(huán),但它不是為使用庫而設(shè)計的。所以在使用熊貓的時候,要考慮高度并行化的矩陣運算方法。
本指南將教你如何使用熊貓,這是一個旨在使用和思考的矩陣操作。在這個過程中,我將向您展示一些實用且省時的技巧和訣竅,它們將使您的熊貓代碼運行得比那些可怕的Python for loops更快!
我們的設(shè)置
在本教程中,我們將使用經(jīng)典的鳶尾花數(shù)據(jù)集。讓 開始滾動,用seaborn加載數(shù)據(jù)集,輸入前5行。
現(xiàn)在讓我們 讓我們構(gòu)建一個基線,并用Python for loop測量我們的速度。我們將通過循環(huán)遍歷每一行來設(shè)置要在數(shù)據(jù)集上執(zhí)行的計算,然后測量整個操作的速度。這將為我們提供一個基線,看看我們的新優(yōu)化能在多大程度上幫助我們擺脫困境。
在上面的代碼中,我們創(chuàng)建了一個基本函數(shù),它使用了If-Else語句。我們編寫一個for循環(huán),通過循環(huán)dataframe對每一行應(yīng)用一個函數(shù),然后測量循環(huán)的總運行時間。
在我的i7-8700k電腦上,循環(huán)5次平均需要0.01345秒。
循環(huán)語句。iterrows()
這是最簡單但最有價值的方法,它可以加快。熊貓內(nèi)置iterrows()函數(shù)。
在上一節(jié)編寫for循環(huán)時,我們使用了range()函數(shù)。然而,當我們在Python中循環(huán)大量的值時,生成器通常要快得多。在本文中,您可以閱讀更多關(guān)于發(fā)電機如何工作并使其運行更快的信息。
潘朵拉 s. iterrows()函數(shù)在內(nèi)部實現(xiàn)了一個生成器函數(shù),它將在每次迭代時生成一行Dataframe。更具體地說,。iterrows()為DataFrame中的每一行生成(index,Series)元組。這實際上與原始Pyt中的相同類似enumerate()這樣的東西在hon中也是一樣的,但是運行起來要快得多。
接下來,我們修改了代碼以使用。iterrows()而不是常規(guī)的for循環(huán)。在我上一節(jié)測試的同一臺機器上,平均運行時間是0.005892秒——快了2.28倍!
使用。apply()完全刪除循環(huán)。
的。iterrows()函數(shù)給我們帶來了巨大的速度,但是我們還遠遠沒有完成。永遠記住,當使用為向量操作設(shè)計的庫時,可能有一種方法可以在不使用for循環(huán)的情況下最有效地完成任務(wù)。
熊貓函數(shù)為我們提供了這個函數(shù)。apply()函數(shù)。Our()接受另一個函數(shù)作為它的輸入,并沿著軸(行、列等)應(yīng)用它。)的數(shù)據(jù)幀。以我們的傳遞函數(shù)為例,lambda通??梢苑奖愕貙⑺袞|西打包在一起。
在下面的代碼中,我們用。應(yīng)用()和lambda函數(shù)來封裝我們想要的計算。在我的機器上,這段代碼的平均運行時間是0.0020897秒,比我們原來的for循環(huán)快6.44倍。
Apply()之所以這么快,是因為它在內(nèi)部嘗試了Cython迭代器。如果你的函數(shù)恰好是為Cython優(yōu)化的,那么。apply()會給你帶來更快的速度。一個額外的好處是,使用內(nèi)置函數(shù)可以生成更干凈、更易讀的代碼。
最后
正如我前面提到的,如果您使用的是為矢量化而設(shè)計的庫,您應(yīng)該總是尋找一種不使用for循環(huán)的計算方法。
同樣,也有很多這樣設(shè)計的庫,包括熊貓,會有方便的內(nèi)置函數(shù),可以進行你要找的精確計算,而且會更快。
的。熊貓的cut()函數(shù)定義了一組bin作為輸入,這些bin定義了If-Else的每個范圍和每組標簽,這些標簽定義了每個范圍返回的值。然后,它執(zhí)行與我們使用compute_class()函數(shù)手工編寫的操作完全相同的操作。
查看下面的代碼以了解如何操作。cut()有效。我們又一次獲得了代碼更清晰、可讀性更好的好處。最后是。cut()函數(shù)平均運行0.001423秒,比原來的for循環(huán)快9.39倍!
更多關(guān)于人工智能的資訊、深度報道、訪談,歡迎關(guān)注AI。不管你是小白還是大神,你想要的在這里都有!
電腦能同時安裝python數(shù)據(jù)庫和java數(shù)據(jù)庫么?
數(shù)據(jù)庫中沒有語言區(qū)分。
常用的數(shù)據(jù)庫有mysql、oracle等。
你只需要在電腦上安裝一個數(shù)據(jù)庫,那么python和jav。可以使用。
It 只是連接到數(shù)據(jù)庫的方法不同。