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

 更新时间:2024年02月23日 09:38:57   作者:勤奋的大熊猫  
这篇文章主要介绍了Pandas如何获取数据的尺寸信息问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Pandas获取数据的尺寸信息

Pandas中获取数据的尺寸信息,比如我们有如下的Excel数据:

在这里插入图片描述

我们可以使用如下代码来获取数据的整体尺寸信息:

import pandas as pd

file = pd.read_excel(r"C:\Users\15025\Desktop\uncle\debug.xlsx")
print(file.size)
print(file.shape)
print(len(file))
"""
result:
55
(11, 5)
11
"""

可以看到,结果与numpy包中的结果类似,当我们的数据为二维时,使用size获取到的是数据的整体大小,为行数量11乘以列数量5

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

当我们使用len()函数作用于二维数据时,我们获得的是行数量。

当数据为一维时,我们使用len()函数获取的结果将会与使用size获取到的结果一致。

pandas处理大数据信息

使用到的数据大小为130M

5 rows × 161 columns

g1.shape
#(171907, 161)
#17W的数据,有161列

pandas 可以处理几千万,上亿的数据

打印出每种类型占的内存量

for dtype in ['float64','int64','object']:
    selected_dtype = g1.select_dtypes(include = [dtype])
    mean_usage_b = selected_dtype.memory_usage(deep=True).mean()
    mean_usage_mb = mean_usage_b/1024**2
    print('平均内存占用 ',dtype , mean_usage_mb)
'''
deep : bool,默认为False
如果为True,则通过询问对象 dtype
来深入了解数据 的系统级内存消耗,
并将其包含在返回值中。
'''

让内存占用变小,int 类型从64 变为 32,在不影响使用的前提下

#查看每种类型最大 能表示多大的数
int_types = ['uint8','int8','int16','int32','int64']
for it in int_types:
    print(np.iinfo(it))
g1_int = g1.select_dtypes(include = ['int64'])
#生成一个只有int类型的DataFrame
coverted_int = g1_int.apply(pd.to_numeric, downcast='unsigned')
#apply 会将数据一条一条的读取,并传入目标进行执行
#int64 转换为了 unsigned
g1_float = g1.select_dtypes(include = ['float64'])
#生成一个只有int类型的DataFrame
coverted_floar = g1_int.apply(pd.to_numeric, downcast='float')
#apply 会将数据一条一条的读取,并传入目标进行执行
#float64转换为了32
import pandas as pd
g1 = pd.read_csv('game_logs.csv')
g1_obj = g1.select_dtypes(include = ['object'])
g1.shape
#(171907, 78)
g1_obj.describe()
#查看信息生成的介绍
#count 数量
#unique	 不重复的值
#top   
#freq
dow = g1_obj.day_of_week
dow_cat = dow.astype('category')
dow_cat.head()

优化str占用内存

converted_obj = pd.DataFrame()

for col in g1_obj.columns:
    num_unique_values = len(g1_obj[col].unique())
    num_total_values= len(g1_obj[col])
    if num_unique_values / num_total_values < 0.5:
        converted_obj.loc[:,col] = g1_obj[col].astype('category')
    else:
        converted_obj.loc[:,col] = g1_obj[col]
#时间格式,写成标准格式的是比较占用内存的
#可以转换时间格式
g1['date'] = pd.to_datetime(date,format='%Y%m%d')
#这种比较占用内存

结果:

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'])
#生成一个只有int类型的DataFrame
coverted_int = g1_int.apply(pd.to_numeric, downcast='unsigned')
#apply 会将数据一条一条的读取,并传入目标进行执行
#int64 转换为了 unsigned
print(mem_usage(g1_int))
print(mem_usage(coverted_int))

7.87 MB

1.48 MB

总结

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

相关文章

  • Python区块链创建Genesis Block教程

    Python区块链创建Genesis Block教程

    这篇文章主要为大家介绍了Python区块链创建Genesis Block教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python属性私有化详解

    Python属性私有化详解

    私有化是为了实现更好的封装形式。能隐藏属性,不被随意修改。以前置双下划线__属性/方法名定义,但是结尾不能是双下划线。如果不让某些属性在类外部被随意更改,可设置成私有属性。在类定义的内部可以访问
    2023-02-02
  • 基于OpenCV实现视频循环播放

    基于OpenCV实现视频循环播放

    这篇文章主要为大家介绍了如何利用OpenCV实现视频的循环播放,本文为大家提供了两种方式,一个是利用Python语言实现,一个是利用C++语言实现,需要的可以参考一下
    2022-02-02
  • 基于python(urlparse)模板的使用方法总结

    基于python(urlparse)模板的使用方法总结

    下面小编就为大家带来一篇基于python(urlparse)模板的使用方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • python数字图像处理像素的访问与裁剪示例

    python数字图像处理像素的访问与裁剪示例

    这篇文章主要为大家介绍了python数字图像处理像素的访问与裁剪示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python数据结构之Array用法实例

    Python数据结构之Array用法实例

    这篇文章主要介绍了Python数据结构之Array用法实例,较为详细的讲述了Array的常见用法,具有很好的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • Python数值求解微分方程方法(欧拉法,隐式欧拉)

    Python数值求解微分方程方法(欧拉法,隐式欧拉)

    这篇文章主要介绍了Python数值求解微分方程方法(欧拉法,隐式欧拉),文章围绕主题展开详细的内介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 跟老齐学Python之一个免费的实验室

    跟老齐学Python之一个免费的实验室

    学习Python也要做实验,也就是尝试性地看看某个命令到底什么含义。在《集成开发环境(IDE)》一章中,我们介绍了Python的IDE时,给大家推荐了IDLE,进入到IDLE中,看到>>>符号,可以在后面输入一行指令。其实,这就是一个非常好的实验室。
    2014-09-09
  • 一行代码让 Python 的运行速度提高100倍

    一行代码让 Python 的运行速度提高100倍

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。这篇文章主要介绍了一行代码让 Python 的运行速度提高100倍的相关知识,需要的朋友可以参考下
    2018-10-10
  • python开发之thread线程基础实例入门

    python开发之thread线程基础实例入门

    这篇文章主要介绍了python开发之thread线程基础,以三个实例形式分析了Python中thread线程的基本使用方法,涉及串行与并行程序的执行原理及线程的操作技巧,需要的朋友可以参考下
    2015-11-11

最新评论