久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

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

本篇內(nèi)容介紹了“python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化的方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元承德做網(wǎng)站,已為上家服務(wù),為承德各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

?先說明一下情況,pandas處理幾百兆的dataframe是沒有問題的,但是我們在處理幾個G甚至更大的數(shù)據(jù)時,就會特別占用內(nèi)存,對內(nèi)存小的用戶特別不好,所以對數(shù)據(jù)進行壓縮是很有必要的。

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

給大家看一下這么查看自己的內(nèi)存大?。╱ser_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)))

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

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

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

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

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

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

  • 數(shù)值類型的列進行降級處理(‘int16", ‘int32", ‘int64", ‘float16", ‘float32", ‘float64")

  • 字符串類型的列轉(zhuǎn)化為類別類型(category)

  • 字符串類型的列的類別數(shù)超過總行數(shù)的一半時,建議使用object類型

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

壓縮數(shù)值的這段代碼是從天池大賽的某個項目中看見的,查閱資料后發(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ù)生稱新的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%,效果顯著

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

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

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

“python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

新聞標題:python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化的方法
網(wǎng)站網(wǎng)址:http://sd-ha.com/article48/jsjohp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、營銷型網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈、服務(wù)器托管微信公眾號

廣告

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

網(wǎng)站托管運營