深入浅出:在Pandas中高效管理分类数据

深入浅出:在Pandas中高效管理分类数据

今日霍州(www.jrhz.info)©️

准备工作

在开始之前,我们需要安装Pandas和Numpy两个包。你可以使用以下代码进行安装:

pip install pandasnumpy

安装好这些包后,让我们正式进入本文的主要内容。

在Pandas中管理分类数据

分类数据(Categorical Data)是Pandas中的一种数据类型,用于表示特定(固定)数量的类别或不同的取值。它与Pandas中的字符串(string)或对象(object)数据类型不同,尤其是在数据的存储方式上。

分类数据具有更高的内存利用率,因为分类数据中的取值只会被存储一次。相比之下,对象类型会将每个取值都作为单独的字符串存储,这会消耗更多的内存。

让我们通过一个示例来实践分类数据。下面展示了如何在Pandas中初始化分类数据:

import pandas as pddf = pd.DataFrame({ 'fruits': pd.Categorical(['apple', 'kiwi', 'watermelon', 'kiwi', 'apple', 'kiwi']), 'size': pd.Categorical(['small', 'large', 'large', 'small', 'large', 'small'])})df.info

输出结果:

RangeIndex: 6 entries, 0 to 5Data columns (total 2 columns): # Column Non-Null CountDtype --- ------ -------------- ----- 0 fruits 6 non-null category 1 size 6 non-null categorydtypes: category(2)memory usage: 396.0 bytes

你可以看到,fruits和size两列的数据类型是category,而不是我们通常见到的object类型。

我们可以通过以下代码,对比分类数据类型和对象数据类型的内存占用情况:

import numpy as npn = 100000df_object = pd.DataFrame({ 'fruit': np.random.choice(['apple', 'banana', 'orange'], size=n)})print('对象类型的内存占用:')print(df_object['fruit'].memory_usage(deep=True))df_category = pd.DataFrame({ 'fruit': pd.Categorical(np.random.choice(['apple', 'banana', 'orange'], size=n))})print('分类类型的内存占用:')print(df_category['fruit'].memory_usage(deep=True))

输出结果:

对象类型的内存占用:6267209分类类型的内存占用:100424

可以看到,随着样本数量的增加,对象类型的数据内存消耗远大于分类数据类型。

接下来,我们来看分类数据类型可以使用的独特方法。比如,你可以获取所有类别:

df['fruits'].cat.categories

输出:

Index(['apple', 'kiwi', 'watermelon'], dtype='object')

我们还可以重命名这些类别:

df['fruits'] = df['fruits'].cat.rename_categories(['fruit_apple', 'fruit_banana', 'fruit_orange'])print(df['fruits'].cat.categories)

输出:

Index(['fruit_apple', 'fruit_banana', 'fruit_orange'], dtype='object')

分类数据类型还支持引入有序值(ordinalvalues),并可以对类别进行比较。

df['size'] = pd.Categorical(df['size'], categories=['small', 'medium', 'large'], ordered=True)df['size'] < 'large'

输出:

0 True1 False2 False3 True4 False5 TrueName: size, dtype: bool

掌握分类数据类型,将为你的数据分析带来极大的优势。

今日霍州(www.jrhz.info)©️

特别声明:[深入浅出:在Pandas中高效管理分类数据] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

张凌赫『林允』《归鸾》,未开机已引爆期待(张凌赫荧屏初吻)

『林允』在《水龙吟》中展现的淡雅气质和共情演技,极其适合古装剧,而张凌赫的“大男主”气场与古装优势,无疑将在剧中形成强烈的化学反应。 随着『林允』在《水龙吟》中颜值与演技的双重飞升,以及张凌赫作为实力派“大男主”的领…

张凌赫『林允』《<strong>归鸾</strong>》,未开机已引爆期待(张凌赫荧屏初吻)

『郭富城』60岁大寿,方媛月子期跑来给他庆生,毫无生产痕迹状态真牛(55岁的『郭富城』)

生日当天,工作室为他精心准备了一场派对,令人意外的是,方媛也特地前来为他庆祝这一重要时刻。整个生日场地以紫色为主,蛋糕准备了两个三层的以及一个大蛋糕,虽然布置不算特别隆重,但仪式感十足。『郭富城』在家人陪伴下开心…

『郭富城』60岁大寿,方媛月子期跑来给他庆生,毫无生产痕迹状态真牛(55岁的『郭富城』)

此次被央媒“点名”的郭麒麟,暴露真实处境,原来徐峥真的没说错

在我看来,郭麒麟在看到这一幕的时候,心中或许也格外难受,明明这个人也是自己的父亲,怎么就对自己态度如此恶劣? 和郭麒麟在合作完之后,他的一句话让大家意识到,郭麒麟的演技真的很优秀,不然他不可能说出“沈星就是…

此次被央媒“点名”的郭麒麟,暴露真实处境,原来徐峥真的没说错

巴西ANATEL认证流程:通讯类产品如手机、路由器的入网许可(巴西认证是什么认证)

ANATEL认证流程由认证机构(Certification Body)进行处理,认证机构必须是巴西国家认可的第三方机构。需要与认证机构联系,确认认证流程、费用、所需文件等细节。通过了解认证流程,确保产品符合…

巴西ANATEL认证流程:通讯类产品如手机、路由器的入网许可(巴西认证是什么认证)

邂逅东方绝美风光的浪漫旅拍(邂逅东方绝美风景图片)

从大理苍山到丽江古城,芙拉薇尔原创旅拍婚纱照将日照金山这一奇观与传统婚纱摄影完美结合。本文为你揭秘这场浪漫旅行背后的技术与艺术之美,探索如何通过旅拍定制一场独一无二的梦幻婚礼。

邂逅东方绝美风光的浪漫旅拍(邂逅东方绝美风景图片)