大家好,,我是Python進(jìn)階者,。 一、前言前幾天在Python鉑金交流群【逆光】問了一個(gè)Pandas數(shù)據(jù)處理的問題,,問題如下: 請(qǐng)問一下,,我現(xiàn)在有5個(gè)excel用pandas數(shù)據(jù),這5個(gè)excel加起來數(shù)據(jù)大概有300萬條,,讀取起來非常慢,,我如果開其他的程序,還會(huì)保內(nèi)存不足,。,。是我的數(shù)據(jù)量大了嗎? 二,、實(shí)現(xiàn)過程這里【平庸】給了一個(gè)指導(dǎo),,具體如下所示:同樣的數(shù)據(jù),讀取xlsx很慢,,換成csv讀取就快很多,。 后來【瑜亮老師】給了一個(gè)指導(dǎo):感覺是你的代碼有問題,另外是否嘗試使用pandas的calamine引擎,? 【逆光】:那我5個(gè)excel數(shù)據(jù)咋拼接?。?/p> 【瑜亮老師】:這個(gè)代碼不用變,,只需使用pandas的calamine引擎讀取excel就能節(jié)省很多時(shí)間 【逆光】:我去試一試 【瑜亮老師】:使用 calamine 引擎,,需要提前安裝python-calamine 庫
安裝命令如下: 讀取的時(shí)候是 這樣對(duì)你原代碼改動(dòng)最小 【平庸】:拼接簡(jiǎn)單,,循環(huán)每讀取一個(gè)xlsx表格時(shí),就以追加模式存到csv里,,首次寫出記得追加表頭,。這樣就合并了。你內(nèi)存不足才需要這樣干,,足夠就不用了,。 【逆光】:我去試一下 不過在安裝的時(shí)候,還是遇到了一些問題,。 【不上班能干啥,!】:pandas更新到2.2.0。但是這個(gè)并不能解決內(nèi)存不夠用的問題,,而是會(huì)加劇內(nèi)存不夠用,,calamine是一種空間換時(shí)間的做法 【逆光】:加內(nèi)存條有用不 【不上班能干啥!】:這指定 有用,,內(nèi)存不夠用基本都是將大批量數(shù)據(jù)處理改為小批量處理的方式 【逆光】:我讀取一個(gè)excel要7分鐘,。。,。,。 【不上班能干啥!】:先用calamine(可以節(jié)省時(shí)間)讀取單個(gè)excel轉(zhuǎn)換其他的格式,,方便后續(xù)的二次操作,。然后二次操作再讀取轉(zhuǎn)換后的數(shù)據(jù),這個(gè)時(shí)間消耗相對(duì)讀取excel來說會(huì)有質(zhì)的飛躍,,pandas中無論處理來源哪種格式的數(shù)據(jù),內(nèi)存消耗是一定的 【逆光】:我csv會(huì)出錯(cuò): ParserError: Error tokenizing data. C error: EOF inside string starting at row 1237 的錯(cuò)誤通常表示在 CSV 文件中有格式問題,,例如未正確關(guān)閉的字符串,、換行符等。這種情況可能導(dǎo)致 Pandas 無法正確解析文件,。 【不上班能干啥,!】:那就可以不轉(zhuǎn)換為csv,pandas中支持的文件格式不僅僅為sql,、csv和excel,。可以嘗試轉(zhuǎn)換為其他文件格式,,相對(duì)于csv數(shù)據(jù)格式也能夠保留,,相對(duì)于excel物理內(nèi)存也比較小。 【逆光】:哈哈,,我得去學(xué)習(xí)一下我不會(huì) 【不上班能干啥,!】:feather,,parquet都是好用的,僅在pandas中用幾乎沒有學(xué)習(xí)成本 順利地解決了自己的問題,。 如果你也有類似這種Python相關(guān)的小問題,,歡迎隨時(shí)來交流群學(xué)習(xí)交流哦,有問必答,! 三,、總結(jié)大家好,我是Python進(jìn)階者,。這篇文章主要盤點(diǎn)了一個(gè)Pandas數(shù)據(jù)處理使用的問題,,文中針對(duì)該問題,給出了具體的解析和代碼實(shí)現(xiàn),,幫助粉絲順利解決了問題,。 最后感謝粉絲【逆光】提出的問題,感謝【平庸】,、【論草莓如何成為凍干莓】,、【瑜亮老師】給出的思路,感謝【莫生氣】等人參與學(xué)習(xí)交流,。 【提問補(bǔ)充】溫馨提示,,大家在群里提問的時(shí)候??梢宰⒁庀旅鎺c(diǎn):如果涉及到大文件數(shù)據(jù),,可以數(shù)據(jù)脫敏后,發(fā)點(diǎn)demo數(shù)據(jù)來(小文件的意思),,然后貼點(diǎn)代碼(可以復(fù)制的那種),,記得發(fā)報(bào)錯(cuò)截圖(截全)。代碼不多的話,,直接發(fā)代碼文字即可,,代碼超過50行這樣的話,發(fā)個(gè).py文件就行,。 大家在學(xué)習(xí)過程中如果有遇到問題,,歡迎隨時(shí)聯(lián)系我解決(我的微信:pdcfighting1),應(yīng)粉絲要求,,我創(chuàng)建了一些高質(zhì)量的Python付費(fèi)學(xué)習(xí)交流群和付費(fèi)接單群,,歡迎大家加入我的Python學(xué)習(xí)交流群和接單群! ------------------- End ------------------- |
|