欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化

 更新時(shí)間:2021年07月12日 09:29:31   作者:柳小蔥  
pandas處理幾百兆的dataframe是沒(méi)有問(wèn)題的,但是我們?cè)谔幚韼讉€(gè)G甚至更大的數(shù)據(jù)時(shí),就會(huì)特別占用內(nèi)存,對(duì)內(nèi)存小的用戶(hù)特別不好,所以對(duì)數(shù)據(jù)進(jìn)行壓縮是很有必要的,本文就介紹了python DataFrame內(nèi)存優(yōu)化,感興趣的可以了解一下

💃今天看案例的時(shí)候看見(jiàn)了一個(gè)關(guān)于pandas數(shù)據(jù)的內(nèi)存壓縮功能,特地來(lái)記錄一下。

🎒先說(shuō)明一下情況,pandas處理幾百兆的dataframe是沒(méi)有問(wèn)題的,但是我們?cè)谔幚韼讉€(gè)G甚至更大的數(shù)據(jù)時(shí),就會(huì)特別占用內(nèi)存,對(duì)內(nèi)存小的用戶(hù)特別不好,所以對(duì)數(shù)據(jù)進(jìn)行壓縮是很有必要的。

1. pandas查看數(shù)據(jù)占用大小

給大家看一下這么查看自己的內(nèi)存大?。?mark>user_log是dataframe的名字)

#方法1 就是使用查看dataframe信息的命令
user_log.info()
#方法2 使用memory_usage()或者getsizeof(user_log)
import time
import sys
print('all_data占據(jù)內(nèi)存約: {:.2f} GB'.format(user_log.memory_usage().sum()/ (1024**3)))
print('all_data占據(jù)內(nèi)存約: {:.2f} GB'.format(sys.getsizeof(user_log)/(1024**3)))

我這里有個(gè)dataframe文件叫做user_log,原始大小為1.91G,然后pandas讀取出來(lái),內(nèi)存使用了2.9G。

看一下原始數(shù)據(jù)大?。?.91G

在這里插入圖片描述

pandas讀取后的內(nèi)存消耗:2.9G

在這里插入圖片描述

2. 對(duì)數(shù)據(jù)進(jìn)行壓縮

  • 數(shù)值類(lèi)型的列進(jìn)行降級(jí)處理(‘int16', ‘int32', ‘int64', ‘float16', ‘float32', ‘float64')
  • 字符串類(lèi)型的列轉(zhuǎn)化為類(lèi)別類(lèi)型(category)
  • 字符串類(lèi)型的列的類(lèi)別數(shù)超過(guò)總行數(shù)的一半時(shí),建議使用object類(lèi)型

我們這里主要采用對(duì)數(shù)值型類(lèi)型的數(shù)據(jù)進(jìn)行降級(jí),說(shuō)一下降級(jí)是什么意思意思呢,可以比喻為一個(gè)一個(gè)抽屜,你有一個(gè)大抽屜,但是你只裝了鑰匙,這就會(huì)有很多空間浪費(fèi)掉,如果我們將鑰匙放到一個(gè)小抽屜里,就可以節(jié)省很多空間,就像字符的類(lèi)型int32 比int8占用空間大很多,但是我們的數(shù)據(jù)使用int8類(lèi)型就夠了,這就導(dǎo)致數(shù)據(jù)占用了很多空間,我們要做的就是進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換,節(jié)省內(nèi)存空間。

壓縮數(shù)值的這段代碼是從天池大賽的某個(gè)項(xiàng)目中看見(jiàn)的,查閱資料后發(fā)現(xiàn),大家壓縮內(nèi)存都是基本固定的函數(shù)形式

def reduce_mem_usage(df):
    starttime = time.time()
    numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
    start_mem = df.memory_usage().sum() / 1024**2
    for col in df.columns:
        col_type = df[col].dtypes
        if col_type in numerics:
            c_min = df[col].min()
            c_max = df[col].max()
            if pd.isnull(c_min) or pd.isnull(c_max):
                continue
            if str(col_type)[:3] == 'int':
                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
                    df[col] = df[col].astype(np.int8)
                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
                    df[col] = df[col].astype(np.int16)
                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
                    df[col] = df[col].astype(np.int32)
                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
                    df[col] = df[col].astype(np.int64)
            else:
                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
                    df[col] = df[col].astype(np.float16)
                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
                    df[col] = df[col].astype(np.float32)
                else:
                    df[col] = df[col].astype(np.float64)
    end_mem = df.memory_usage().sum() / 1024**2
    print('-- Mem. usage decreased to {:5.2f} Mb ({:.1f}% reduction),time spend:{:2.2f} min'.format(end_mem,
                                                                                                           100*(start_mem-end_mem)/start_mem,
                                                                                                           (time.time()-starttime)/60))
    return df

用壓縮的方式將數(shù)據(jù)導(dǎo)入user_log2中

#首先讀取到csv中如何傳入函數(shù)生稱(chēng)新的csv
user_log2=reduce_mem_usage(pd.read_csv(r'/Users/liucong/MainFiles/ML/tianchi/tianmiao/user_log_format1.csv'))

讀取成功:內(nèi)訓(xùn)大小為890.48m 減少了69.6%,效果顯著

在這里插入圖片描述

查看壓縮后的數(shù)據(jù)集信息:類(lèi)型發(fā)生了變化,數(shù)量變小了

在這里插入圖片描述

3. 參考資料

《天池大賽》
《kaggle大賽》
鏈接: pandas處理datafarme節(jié)約內(nèi)存.

到此這篇關(guān)于python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化的文章就介紹到這了,更多相關(guān)python DataFrame內(nèi)存優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Flask數(shù)據(jù)庫(kù)的連接與使用

    詳解Flask數(shù)據(jù)庫(kù)的連接與使用

    這篇文章主要為大家想想介紹了Python中Flask數(shù)據(jù)庫(kù)的連接與使用,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-02-02
  • python中判斷文件結(jié)束符的具體方法

    python中判斷文件結(jié)束符的具體方法

    在本篇文章里小編給大家分享的是一篇關(guān)于python中判斷文件結(jié)束符的具體方法,有興趣的朋友們可以參考學(xué)習(xí)下。
    2020-08-08
  • PyQt5界面無(wú)響應(yīng)的解決方案

    PyQt5界面無(wú)響應(yīng)的解決方案

    如果在主線程執(zhí)行耗時(shí)操作,比如 循環(huán)、sleep、wait 異步線程執(zhí)行 會(huì)導(dǎo)致 UI 界面進(jìn)入無(wú)響應(yīng)狀態(tài),我們可以采用以下兩種方式異步處理:使用QThread 或 QTimer,本文給大家介紹了PyQt5界面無(wú)響應(yīng)的解決方案,需要的朋友可以參考下
    2024-05-05
  • 詳解Python實(shí)現(xiàn)圖像分割增強(qiáng)的兩種方法

    詳解Python實(shí)現(xiàn)圖像分割增強(qiáng)的兩種方法

    圖像分割就是把圖像分成若干個(gè)特定的、具有獨(dú)特性質(zhì)的區(qū)域并提出感興趣目標(biāo)的技術(shù)和過(guò)程。本文將為大家分享兩個(gè)用Python實(shí)現(xiàn)像分割增強(qiáng)的方法,需要的可以參考一下
    2022-03-03
  • Python中的random()方法的使用介紹

    Python中的random()方法的使用介紹

    這篇文章主要介紹了Python中的random()方法的使用,是Python入門(mén)的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • python3+PyQt5重新實(shí)現(xiàn)自定義數(shù)據(jù)拖放處理

    python3+PyQt5重新實(shí)現(xiàn)自定義數(shù)據(jù)拖放處理

    這篇文章主要為大家詳細(xì)介紹了python3+PyQt5重新實(shí)現(xiàn)自定義數(shù)據(jù)拖放處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Flask sqlalchemy一對(duì)多與多對(duì)一與一對(duì)一及多對(duì)多關(guān)系介紹

    Flask sqlalchemy一對(duì)多與多對(duì)一與一對(duì)一及多對(duì)多關(guān)系介紹

    這篇文章主要介紹了Flask sqlalchemy一對(duì)多與多對(duì)一與一對(duì)一及多對(duì)多關(guān)系介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)

    Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)

    本文主要介紹了Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié),用戶(hù)發(fā)送請(qǐng)求時(shí)攜帶的參數(shù)后端需要使用,而不同的發(fā)送參數(shù)的方式對(duì)應(yīng)了不同的提取參數(shù)的方式,本文就詳細(xì)的介紹一下
    2021-08-08
  • 使用 python 實(shí)現(xiàn)單人AI 掃雷游戲

    使用 python 實(shí)現(xiàn)單人AI 掃雷游戲

    這篇文章主要介紹了使用 python 實(shí)現(xiàn)單人AI 掃雷游戲,今天我們用 Python 完成這個(gè)小程序,并且用AI來(lái)學(xué)習(xí)并實(shí)現(xiàn)它,需要的朋友可以參考下
    2021-08-08
  • Python中Matplotlib圖像添加標(biāo)簽的方法實(shí)現(xiàn)

    Python中Matplotlib圖像添加標(biāo)簽的方法實(shí)現(xiàn)

    本文主要介紹了Python中Matplotlib圖像添加標(biāo)簽的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論