求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
Pandas 教程
1. Pandas 是什么
2.Pandas库下载和安装
3.Pandas Series入门教程
4.Pandas DataFrame入门教程
5.Pandas Panel三维数据结构
6.Python Pandas描述性统计
7.Pandas使用自定义函数
8.Pandas reindex重置索引
9.Pandas iteration遍历
10.Pandas sorting排序
11.Pandas去重函数:drop_duplicates()
12.Python Pandas处理字符串(方法详解)
13.Pandas设置数据显示格式
14.Pandas loc/iloc用法详解
15.Python Pandas统计函数
16.Python Pandas窗口函数
17.Python Pandas聚合函数
18.Python Pandas缺失值处理
19.Pandas groupby分组操作详解
20.Pandas merge合并操作
21.Pandas concat连接操作
22.Python Pandas时间序列
23.Pandas日期时间格式化
24.Padans Timedelta时间差
25.Pandas随机选择样本
26.Pandas数据重采样
27.Python Pandas分类对象
28.Python Pandas绘图
29.Python Pandas读取文件
30.Pandas csv读写文件
31.Pandas Excel读写操作
32.Pandas index操作索引
33.Pandas分层索引入门教程
34.Pandas执行SQL操作
35.Pandas和NumPy的比较
36.Pandas使用的注意事项
 

 
Python Pandas分类对象
23 次浏览
1次  

通常情况下,数据集中会存在许多同一类别的信息,比如相同国家、相同行政编码、相同性别等,当这些相同类别的数据多次出现时,就会给数据处理增添许多麻烦,导致数据集变得臃肿,不能直观、清晰地展示数据。

针对上述问题,Pandas 提供了分类对象(Categorical Object),该对象能够实现有序排列、自动去重的功能,但是它不能执行运算。本节,我们了解一下分类对象的使用。

对象创建

我们可以通过多种方式创建分类对象,下面介绍以下两种方法:

1) 指定dtype创建

1.import pandas as pd
2. s = pd.Series(["a","b","c","a"], dtype="category")
3. print(s)

输出结果:

0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]

通过上述示例,您可能会注意到,虽然传递给 Series 四个元素值,但是它的类别为 3,这是因为 a 的类别存在重复。

2) pd.Categorical

通过 Category 的构造函数,您可以创建一个类别对象。构造函数,如下所示:

pandas.Categorical(values, categories, ordered)

values:以列表的形式传参,表示要分类的值。

ordered:布尔值,默认为 False,若为 Ture,表示对分类的数据进行排序。

dtype:返回一个 category 类型,表示分类对象。

示例如下:

1.import pandas as pd
2. #自动按a、b、c分类
3. cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
4.print(cat)

输出结果:

[a, b, c, a, b, c]
Categories (3, object): [a, b, c]

再看一组示例:

1.import pandas as pd
2. cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
3. print(cat)

输出结果:

[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]

上述示例中,第二个参数值表示类别,当列表中不存在某一类别时,会自动将类别值设置为 NA。

通过指定 ordered=True 来实现有序分类。示例如下:

1.import pandas as pd
2. cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
3. print(cat)
4. #求最小值
5. print(cat.min())

输出结果:

[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]
c

获取统计信息

对已经分类的数据使用 describe() 方法,您会得到和数据统计相关的摘要信息。

1.import pandas as pd
2. import numpy as np
3. cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
4. df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})
5. print(df.describe())
6. print(df["cat"].describe())

输出结果:

       cat  s
count    3  3
unique   2  2
top      c  c
freq     2  2

count     3
unique    2
top       c
freq      2
Name: cat, dtype: object

获取类别属性

使用 obj.categories 命令可以获取对象的类别信息。示例如下:

1.import pandas as pd
2. import numpy as np
3. s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
4. print (s.categories)

输出结果:

Index(['b', 'a', 'c'], dtype='object')

通过 obj.order 可以获取 order 指定的布尔值:

1.import pandas as pd
2. import numpy as np
3. cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
4. #False表示未指定排序
5. print (cat.ordered)s

输出结果:

	False

重命名类别

要想对类别实现重命名,可以通过 Series.cat.categories 来实现的,示例如下:

1.import pandas as pd
2. s = pd.Series(["a","b","c","a"], dtype="category")
3. #对类名重命名
4. s.cat.categories = ["Group %s" % g for g in s.cat.categories]
5. print(s.cat.categories)

输出结果:

Index(['Group a', 'Group b', 'Group c'], dtype='object')

追加新类别

使用 s.cat.add_categories() 方法,可以追加新类别。

1.import pandas as pd
2. s = pd.Series(["a","b","c","a"], dtype="category")
3. #追加新类别
4. s = s.cat.add_categories([5])
5. #查看现有类别
6. print(s.cat.categories)

输出结果:

	Index(['a', 'b', 'c', 5], dtype='object')

删除类别

使用 remove_categories() 方法,可以删除不需要的类别。示例如下:

1.import pandas as pd
2. s = pd.Series(["a","b","c","a"], dtype="category")
3. #原序列
4.print(s)
5. #删除后序列
6. print(s.cat.remove_categories("a"))

输出结果

0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]

0    NaN
1      b
2      c
3    NaN
dtype: category
Categories (2, object): [b, c]

分类对象比较

在下述两种情况下,我们可以对分类对象进行比较:

  • 当两个类别对象长度相同时,可以进行比较运算;
  • 当两个类别的 ordered 均等于 True,并且类别相同时,可以进行比较运算,比如 ==,!=,>,>=,< 和 <=。

示例如下:

1.import pandas as pd
2. s1=['a','a','b','d','c']
3. #当满足两个类别长度相同时
4. ss0=pd.Categorical(s1,categories=['a','d','b','c'])
5. ss1 = pd.Categorical(s1)
6. print(ss0==ss1)

输出结果:

array([ True,  True,  True,  True,  True])

示例如下

import pandas as pd

1.s1=['a','a','b','d','c']
2. s2=['a','b','b','d','c']
3. #满足上述第二个条件,类别相同,并且ordered均为True
4. ss0=pd.Categorical(s1,categories=['a','d','b','c'],ordered=True)
5. ss1 = pd.Categorical(s2,categories=['a','d','b','c'],ordered=True)
6. print(ss0<ss1)

输出结果:

array([False,  True, False, False, False])

您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



23 次浏览
1次