import pandas as pd
gl=pd.read_csv('./Titanic_Data-master/Titanic_Data-master/train.csv')
gl.head()
gl.shape#查看大小
1.查看基本數據信息javascript
gl.info(memory_usage='deep')#查看基本信息
2.查看不一樣數據類型的佔用空間css
for dtype in['float64','int64','object']:
selevtrd_dtype=gl.select_dtypes(include=[dtype])#塞出不一樣數據類型
mean_usage_b=selevtrd_dtype.memory_usage(deep=True).mean()#求對應的數據類型的內存平均值
mean_usage_mb=mean_usage_b/1024**2
print('平均內存佔用',dtype,mean_usage_mb)
import numpy as np
int_types=['uint8','int8','int16','int32','int64']
for it in int_types:
print(np.iinfo(it))#簡化版info,查看每種數據類型的值範圍
3.經過轉換數據類型來減小數據佔用內存html
def menu_usage(pandas_obj):
if isinstance(pandas_obj,pd.DataFrame):#isinstance() 函數來判斷一個對象是不是一個已知的類型,相似 type()。
usage_b=pandas_obj.memory_usage(deep=True).sum()#求內存佔用量的總和
else:
usage_b=pandas_obj.memory_usage(deep=True)
usage_mb=usage_b/1024**2
return'{:03.2f}MB'.format(usage_mb)#規定數據格式是小數點後2位
gl_int=gl.select_dtypes(include=['int64'])#去除int64的數據
coverter_int=gl_int.apply(pd.to_numeric,downcast='unsigned')#pd.to_numeric數據轉換;downcast='unsigned'向下轉換成無符號
print(menu_usage(gl_int))
print(menu_usage(coverter_int))
gl_float=gl.select_dtypes(include=['float64'])#去除int64的數據
coverter_float=gl_int.apply(pd.to_numeric,downcast='float')#pd.to_numeric數據轉換;downcast='unsigned'向下轉換成無符號
print(menu_usage(gl_float))
print(menu_usage(coverter_float))
4.把全部數據類型轉換成對應的不一樣的數據類型html5
optimized_gl=gl.copy()
optimized_gl[coverter_int.columns]=coverter_int
optimized_gl[coverter_float.columns]=coverter_float
print(menu_usage(gl))
print(menu_usage(optimized_gl))
5.describe():統計各項lable的屬性指標java
gl_obj=gl.select_dtypes(include=['object']).copy()
gl_obj.describe()
6.把重複的lable放在一個空間裏:即轉換成category類型node
dow=gl_obj.Sex#抽出對應lable的數據
dow.head()
7.經過把數據類型object=>category,來減小佔用的空間python
dow_cat=dow.astype('category')#把上面的object轉成category類型
dow_cat.head()
dow_cat.head(10).cat.codes#鏈接字符串,查出不一樣類
print(menu_usage(dow))#object類型
print(menu_usage(dow_cat))#category類型,佔空間減小了
8.計算整個表經過轉換成category類型後的內存jquery
converted_obj=pd.DataFrame()#定義成空的DataFrame
for col in gl_obj.columns:
num_unique_values=len(gl_obj[col].unique())
num_total_values=len(gl_obj[col])
if num_unique_values/num_total_values<0.5:#尋找重複量最大的一列
converted_obj.loc[:,col]=gl_obj[col].astype('category')#astype轉換類型
else:
converted_obj.loc[:,col]=gl_obj[col]
print(menu_usage(gl_obj))
print(menu_usage(converted_obj))