pandas分批讀取大數(shù)據(jù)集教程
如果你的電腦內(nèi)存較小那么想在本地做一些事情是很有局限性的(哭喪臉),比如想拿一個(gè)kaggle上面的競賽來練練手,你會(huì)發(fā)現(xiàn)多數(shù)訓(xùn)練數(shù)據(jù)集都是大幾G或者幾十G的,自己那小破電腦根本跑不起來。行,你有8000w條樣本你牛逼,我就取400w條出來跑跑總行了吧(狡滑臉)。
下圖是2015年kaggle上一個(gè)CTR預(yù)估比賽的數(shù)據(jù)集:
看到train了吧,原始數(shù)據(jù)集6個(gè)G,特征工程后得多大?那我就取400w出來train。為了節(jié)省時(shí)間和完整介紹分批讀入數(shù)據(jù)的功能,這里以test數(shù)據(jù)集為例演示。其實(shí)就是使用pandas讀取數(shù)據(jù)集時(shí)加入?yún)?shù)chunksize。
可以通過設(shè)置chunksize大小分批讀入,也可以設(shè)置iterator=True后通過get_chunk選取任意行。
當(dāng)然將分批讀入的數(shù)據(jù)合并后就是整個(gè)數(shù)據(jù)集了。
ok了!
補(bǔ)充知識(shí):用Pandas 處理大數(shù)據(jù)的3種超級(jí)方法
易上手, 文檔豐富的Pandas 已經(jīng)成為時(shí)下最火的數(shù)據(jù)處理庫。此外,Pandas數(shù)據(jù)處理能力也一流。
其實(shí)無論你使用什么庫,大量的數(shù)據(jù)處理起來往往回遇到新的挑戰(zhàn)。
數(shù)據(jù)處理時(shí),往往會(huì)遇到?jīng)]有足夠內(nèi)存(RAM)這個(gè)硬件問題。 企業(yè)往往需要能夠存夠數(shù)百, 乃至數(shù)千 的GB 數(shù)據(jù)。
即便你的計(jì)算機(jī)恰好有足夠的內(nèi)存來存儲(chǔ)這些數(shù)據(jù), 但是讀取數(shù)據(jù)到硬盤依舊非常耗時(shí)。
別擔(dān)心! Pandas 數(shù)據(jù)庫會(huì)幫我們擺脫這種困境。 這篇文章包含3種方法來減少數(shù)據(jù)大小,并且加快數(shù)據(jù)讀取速度。 我用這些方法,把超過100GB 的數(shù)據(jù), 壓縮到了64GB 甚至32GB 的內(nèi)存大小。
快來看看這三個(gè)妙招吧。
數(shù)據(jù)分塊
csv 格式是一種易儲(chǔ)存, 易更改并且用戶易讀取的格式。 pandas 有read_csv ()方法來上傳數(shù)據(jù),存儲(chǔ)為CSV 格式。當(dāng)遇到CSV 文件過大,導(dǎo)致內(nèi)存不足的問題該怎么辦呢?試試強(qiáng)大的pandas 工具吧!我們先把整個(gè)文件拆分成小塊。這里,我們把拆分的小塊稱為chunk。
一個(gè)chunk 就是我們數(shù)據(jù)的一個(gè)小組。 Chunk 的大小主要依據(jù)我們內(nèi)存的大小,自行決定。
過程如下:
1.讀取一塊數(shù)據(jù)。
2.分析數(shù)據(jù)。
3.保存該塊數(shù)據(jù)的分析結(jié)果。
4.重復(fù)1-3步驟,直到所有chunk 分析完畢。
5.把所有的chunk 合并在一起。
我們可以通過read_csv()方法Chunksize來完成上述步驟。 Chunksize是指pandas 一次能讀取到多少行csv文件。這個(gè)當(dāng)然也是建立在RAM 內(nèi)存容量的基礎(chǔ)上。
假如我們認(rèn)為數(shù)據(jù)呈現(xiàn)高斯分布時(shí), 我們可以在一個(gè)chunk 上, 進(jìn)行數(shù)據(jù)處理和視覺化, 這樣會(huì)提高準(zhǔn)確率。
當(dāng)數(shù)據(jù)稍微復(fù)雜時(shí), 例如呈現(xiàn)泊松分布時(shí), 我們最好能一塊塊篩選,然后把每一小塊整合在一起。 然后再進(jìn)行分析。很多時(shí)候, 我們往往刪除太多的不相關(guān)列,或者刪除有值行。 我們可以在每個(gè)chunk 上,刪除不相關(guān)數(shù)據(jù), 然后再把數(shù)據(jù)整合在一起,最后再進(jìn)行數(shù)據(jù)分析。
代碼如下:
刪除數(shù)據(jù)
有時(shí)候, 我們一眼就能看到需要分析的列。事實(shí)上, 通常名字,賬號(hào)等列,我們是不做分析的。
讀取數(shù)據(jù)前, 先跳過這些無用的列,可以幫我們節(jié)省很多內(nèi)存。 Pandas 可以允許我們選擇想要讀取的列。
把包含無用信息的列刪除掉, 往往給我們節(jié)省了大量內(nèi)存。
此外,我們還可以把有缺失值的行,或者是包含“NA” 的行刪除掉。 通過dropna()方法可以實(shí)現(xiàn):
有幾個(gè)非常有用的參數(shù),可以傳給dropna():
how: 可選項(xiàng):“any”(該行的任意一列如果出現(xiàn)”NA”, 刪除該行)
“all” (只有某行所有數(shù)數(shù)據(jù)全部是”NA” 時(shí)才刪除)
thresh: 設(shè)定某行最多包含多少個(gè)NA 時(shí),才進(jìn)行刪除
subset: 選定某個(gè)子集,進(jìn)行NA 查找
可以通過這些參數(shù), 尤其是thresh 和 subset 兩個(gè)參數(shù)可以決定某行是否被刪除掉。
Pandas 在讀取信息的時(shí)候,無法刪除列。但是我們可以在每個(gè)chunk 上,進(jìn)行上述操作。
為列設(shè)定不同的數(shù)據(jù)類型
數(shù)據(jù)科學(xué)家新手往往不會(huì)對(duì)數(shù)據(jù)類型考慮太多。 當(dāng)處理數(shù)據(jù)越來越多時(shí), 就非常有必要考慮數(shù)據(jù)類型了。
行業(yè)常用的解決方法是從數(shù)據(jù)文件中,讀取數(shù)據(jù), 然后一列列設(shè)置數(shù)據(jù)類型。 但當(dāng)數(shù)據(jù)量非常大時(shí), 我們往往擔(dān)心內(nèi)存空間不夠用。
在CSV 文件中,例如某列是浮點(diǎn)數(shù), 它往往會(huì)占據(jù)更多的存儲(chǔ)空間。 例如, 當(dāng)我們下載數(shù)據(jù)來預(yù)測股票信息時(shí), 價(jià)格往往以32位浮點(diǎn)數(shù)形式存儲(chǔ)。
但是,我們真的需要32位浮點(diǎn)數(shù)碼? 大多數(shù)情況下, 股票價(jià)格以小數(shù)點(diǎn)后保留兩位數(shù)據(jù)進(jìn)行交易。 即便我們想看到更精確的數(shù)據(jù), 16位浮點(diǎn)數(shù)已經(jīng)足夠了。
我們往往會(huì)在讀取數(shù)據(jù)的時(shí)候, 設(shè)置數(shù)據(jù)類型,而不是保留數(shù)據(jù)原類型。 那樣的話,會(huì)浪費(fèi)掉部分內(nèi)存。
通過read_csv() 中設(shè)置dtype參數(shù)來完成數(shù)據(jù)類型設(shè)置。還可以設(shè)置字典類型,設(shè)置該列是鍵, 設(shè)置某列是字典的值。
請看下面的pandas 例子:
文章到這里結(jié)束了! 希望上述三個(gè)方法可以幫你節(jié)省時(shí)間和內(nèi)存。
以上這篇pandas分批讀取大數(shù)據(jù)集教程就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
django的分頁器Paginator 從django中導(dǎo)入類
這篇文章主要介紹了django的分頁器Paginator 從django中導(dǎo)入類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python開發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn)
這篇文章主要介紹了Python開發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02python去除刪除數(shù)據(jù)中\(zhòng)u0000\u0001等unicode字符串的代碼
這篇文章主要介紹了python去除刪除數(shù)據(jù)中\(zhòng)u0000\u0001等unicode字符串的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03如何基于Python pygame實(shí)現(xiàn)動(dòng)畫跑馬燈
這篇文章主要介紹了如何基于Python pygame實(shí)現(xiàn)動(dòng)畫跑馬燈,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Python pytest裝飾器總結(jié)(實(shí)例詳解)
這篇文章主要介紹了Python pytest裝飾器總結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04