翼度科技»论坛 编程开发 python 查看内容

Pandas如何获取数据的尺寸信息

11

主题

11

帖子

33

积分

新手上路

Rank: 1

积分
33
Pandas获取数据的尺寸信息
  1. Pandas
复制代码
中获取数据的尺寸信息,比如我们有如下的
  1. Excel
复制代码
数据:

我们可以使用如下代码来获取数据的整体尺寸信息:
  1. import pandas as pd

  2. file = pd.read_excel(r"C:\Users\15025\Desktop\uncle\debug.xlsx")
  3. print(file.size)
  4. print(file.shape)
  5. print(len(file))
  6. """
  7. result:
  8. 55
  9. (11, 5)
  10. 11
  11. """
复制代码
可以看到,结果与
  1. numpy
复制代码
包中的结果类似,当我们的数据为二维时,使用
  1. size
复制代码
获取到的是数据的整体大小,为行数量
  1. 11
复制代码
乘以列数量
  1. 5
复制代码

当我们使用
  1. shape
复制代码
时,获取到的是二维数据行数量与列数量组成的一个元组
  1. (11, 5)
复制代码

当我们使用
  1. len()
复制代码
函数作用于二维数据时,我们获得的是行数量。
当数据为一维时,我们使用
  1. len()
复制代码
函数获取的结果将会与使用
  1. size
复制代码
获取到的结果一致。

pandas处理大数据信息
  1. 使用到的数据大小为130M
复制代码
5 rows × 161 columns
  1. g1.shape
  2. #(171907, 161)
  3. #17W的数据,有161列
复制代码
pandas 可以处理几千万,上亿的数据
  1. 打印出每种类型占的内存量
复制代码
  1. for dtype in ['float64','int64','object']:
  2.     selected_dtype = g1.select_dtypes(include = [dtype])
  3.     mean_usage_b = selected_dtype.memory_usage(deep=True).mean()
  4.     mean_usage_mb = mean_usage_b/1024**2
  5.     print('平均内存占用 ',dtype , mean_usage_mb)
  6. '''
  7. deep : bool,默认为False
  8. 如果为True,则通过询问对象 dtype
  9. 来深入了解数据 的系统级内存消耗,
  10. 并将其包含在返回值中。
  11. '''
复制代码
让内存占用变小,int 类型从64 变为 32,在不影响使用的前提下
  1. #查看每种类型最大 能表示多大的数
  2. int_types = ['uint8','int8','int16','int32','int64']
  3. for it in int_types:
  4.     print(np.iinfo(it))
复制代码
  1. g1_int = g1.select_dtypes(include = ['int64'])
  2. #生成一个只有int类型的DataFrame
  3. coverted_int = g1_int.apply(pd.to_numeric, downcast='unsigned')
  4. #apply 会将数据一条一条的读取,并传入目标进行执行
  5. #int64 转换为了 unsigned
复制代码
  1. g1_float = g1.select_dtypes(include = ['float64'])
  2. #生成一个只有int类型的DataFrame
  3. coverted_floar = g1_int.apply(pd.to_numeric, downcast='float')
  4. #apply 会将数据一条一条的读取,并传入目标进行执行
  5. #float64转换为了32
复制代码
  1. import pandas as pd
  2. g1 = pd.read_csv('game_logs.csv')
  3. g1_obj = g1.select_dtypes(include = ['object'])
  4. g1.shape
  5. #(171907, 78)
  6. g1_obj.describe()
  7. #查看信息生成的介绍
  8. #count 数量
  9. #unique         不重复的值
  10. #top   
  11. #freq
复制代码
  1. dow = g1_obj.day_of_week
  2. dow_cat = dow.astype('category')
  3. dow_cat.head()
复制代码
优化str占用内存
  1. converted_obj = pd.DataFrame()

  2. for col in g1_obj.columns:
  3.     num_unique_values = len(g1_obj[col].unique())
  4.     num_total_values= len(g1_obj[col])
  5.     if num_unique_values / num_total_values < 0.5:
  6.         converted_obj.loc[:,col] = g1_obj[col].astype('category')
  7.     else:
  8.         converted_obj.loc[:,col] = g1_obj[col]
复制代码
  1. #时间格式,写成标准格式的是比较占用内存的
  2. #可以转换时间格式
  3. g1['date'] = pd.to_datetime(date,format='%Y%m%d')
  4. #这种比较占用内存
复制代码
结果:
  1. def mem_usage(pandas_obj):    if isinstance(pandas_obj,pd.DataFrame):        usage_b = pandas_obj.memory_usage(deep=True).sum()    else:        usage_b = pandas_obj.memory_usagee(deep=True)        usage_mb = usage_b/1024**2    return '{:03.2f} MB'.format(usage_mb)g1_int = g1.select_dtypes(include = ['int64'])
  2. #生成一个只有int类型的DataFrame
  3. coverted_int = g1_int.apply(pd.to_numeric, downcast='unsigned')
  4. #apply 会将数据一条一条的读取,并传入目标进行执行
  5. #int64 转换为了 unsignedprint(mem_usage(g1_int))print(mem_usage(coverted_int))
复制代码
7.87 MB
1.48 MB

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/python/3161806gr.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具