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))