首页
学习
活动
专区
圈层
工具
发布

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

准备工作

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

pip install pandas numpy

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

在Pandas中管理分类数据

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

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

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

import pandas as pd

df = 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 5

Data columns (total 2 columns):

#   Column  Non-Null Count  Dtype

---  ------  --------------  -----

0   fruits  6 non-null      category

1   size    6 non-null      category

dtypes: category(2)

memory usage: 396.0 bytes

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

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

import numpy as np

n = 100000

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

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

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

df['size'] < 'large'

输出:

0     True

1    False

2    False

3     True

4    False

5     True

Name: size, dtype: bool

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Ok42epKKA0w-3gRN2sOXsrcA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券