婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python數據分析之DataFrame內存優化

python數據分析之DataFrame內存優化

熱門標簽:上海正規的外呼系統最新報價 長春極信防封電銷卡批發 電銷機器人錄音要學習什么 如何地圖標注公司 預覽式外呼系統 煙臺電話外呼營銷系統 銀川電話機器人電話 企業彩鈴地圖標注 外賣地址有什么地圖標注

💃今天看案例的時候看見了一個關于pandas數據的內存壓縮功能,特地來記錄一下。

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

1. pandas查看數據占用大小

給大家看一下這么查看自己的內存大小(user_log是dataframe的名字)

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

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

看一下原始數據大小:1.91G

pandas讀取后的內存消耗:2.9G

2. 對數據進行壓縮

  • 數值類型的列進行降級處理(‘int16', ‘int32', ‘int64', ‘float16', ‘float32', ‘float64')
  • 字符串類型的列轉化為類別類型(category)
  • 字符串類型的列的類別數超過總行數的一半時,建議使用object類型

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

壓縮數值的這段代碼是從天池大賽的某個項目中看見的,查閱資料后發現,大家壓縮內存都是基本固定的函數形式

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

用壓縮的方式將數據導入user_log2中

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

讀取成功:內訓大小為890.48m 減少了69.6%,效果顯著

查看壓縮后的數據集信息:類型發生了變化,數量變小了

3. 參考資料

《天池大賽》
《kaggle大賽》
鏈接: pandas處理datafarme節約內存.

到此這篇關于python數據分析之DataFrame內存優化的文章就介紹到這了,更多相關python DataFrame內存優化內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python切片中內存的注意事項總結
  • 用python監控服務器的cpu,磁盤空間,內存,超過郵件報警
  • 總結python 三種常見的內存泄漏場景
  • Python numpy大矩陣運算內存不足如何解決
  • Python內存泄漏和內存溢出的解決方案
  • Python中的內存管理之python list內存使用詳解

標簽:西寧 宜昌 潮州 上饒 佳木斯 珠海 盤錦 湖北

巨人網絡通訊聲明:本文標題《python數據分析之DataFrame內存優化》,本文關鍵詞  python,數據分析,之,DataFrame,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python數據分析之DataFrame內存優化》相關的同類信息!
  • 本頁收集關于python數據分析之DataFrame內存優化的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 北票市| 高密市| 镇宁| 米易县| 呼图壁县| 项城市| 合肥市| 黔江区| 博兴县| 漳平市| 都兰县| 石家庄市| 松滋市| 洞口县| 天镇县| 拜泉县| 上蔡县| 古丈县| 鄢陵县| 云龙县| 安新县| 民勤县| 时尚| 乌兰县| 云南省| 甘泉县| 天祝| 邻水| 昭通市| 栾川县| 新龙县| 郯城县| 建水县| 恩平市| 丹凤县| 常州市| 广饶县| 渝北区| 临高县| 固始县| 阿拉善右旗|