python pandas數據類型與佔用內存--優化

一、疑難雜症

  最近使用pandas計算時,總是感覺dataframe佔用內存過大,內存不足,導致計算時間被拉長。於是,趁着週末一探究竟。找到一個原因,與大家分享!

二、探尋原因

  首先,pandas底層數據存儲與計算是基於numpy的。通過查找資料我們發現,pandas的主要類型主要是下表的第一列。這幾類是pandas的數據大類,後面的 Numpy type是其包含的小雷。在我們利用pandas讀取數據時,尤其是數值型數據時,他會默認啓用大類來定義數據類型。比如:表裏只有數字1或者1.0,就會被定義爲int64或者float64。作爲充分考慮數據的多變性,這種行爲是沒有疑義的。但是,but,他就是消耗了內存。 在這裏插入圖片描述
  常用數據類型的佔用內存情況如下:
在這裏插入圖片描述

flaottype =['float32','float64']
inttypes = ["uint8", "int8", "int16",'float32']
for it in inttypes:
    print(np.iinfo(it))
# 這段代碼可以輸出數據類型的表示範圍。

  知道了這些不同類型的數據類型佔用的內存大小,再進一步掌握自己實際操作的數據的範圍,就可以選擇合適的數據類型,這樣可以節省內存,優化計算。

三、方案

  放一個操作的demo。大家可以結合實際進行操作。前後的內訓佔用節省了月65%歡迎指正!

df3.info()
輸出
<class 'pandas.core.frame.DataFrame'>
Index: 34519 entries, a to m
Data columns (total 17 columns):
.......省略........
dtypes: float64(7), int64(10)
memory usage: 6.0+ MB --------------默認讀取的類型,佔用內存
df4 = df3.astype(np.int8)
輸出
<class 'pandas.core.frame.DataFrame'>
Index: 34519 entries, a to m
Data columns (total 17 columns):
.......省略........
dtypes: int8(17)
memory usage: 2.1+ MB---------------astype修改後的,佔用內存

參考:
https://pbpython.com/pandas_dtypes.html
https://blog.csdn.net/wj1066/article/details/81124959

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章