数据分析必备:一步步教你如何用Pandas做数据分析(20)

1、Pandas 分类数据

Pandas 分类数据的操作实例

数据通常实时包含重复的文本列。性别,国家/地区和代码等功能始终是重复的。这些是分类数据的示例。

分类变量只能采用有限的且通常是固定数量的可能值。除固定长度外,分类数据可能还具有顺序,但不能执行数字运算。分类是Pandas数据类型。

分类数据类型在以下情况下很有用

一个仅包含几个不同值的字符串变量。将这样的字符串变量转换为分类变量将节省一些内存。

变量的词汇顺序与逻辑顺序("一个","两个","三个")不同。通过转换为类别并在类别上指定顺序,排序和最小/最大将使用逻辑顺序而不是词汇顺序。

作为其他Python库的信号,此列应视为分类变量(例如,使用适当的统计方法或绘图类型)。

2、对象创建

分类对象可以通过多种方式创建。下面描述了不同的方式:

类别

通过在熊猫对象创建中将dtype指定为" category"。

python 复制代码
 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 print(s)

运行结果

python 复制代码
 0 a
 1 b
 2 c
 3 a
 dtype: category
 Categories (3, object): [a, b, c]

传递给series对象的元素数为4,但是类别仅为3。在输出类别中观察相同。

3、pd.Categorical

使用标准的熊猫分类构造器,我们可以创建一个类别对象。

python 复制代码
pandas.Categorical(values, categories, ordered)

我们看一个实例-

python 复制代码
 import pandas as pd
 cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
 print(cat)

运行结果

python 复制代码
[a, b, c, a, b, c]
 Categories (3, object): [a, b, c]

让我们再看一个实例

python 复制代码
 import pandas as pd
 cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
 print(cat)

运行结果

python 复制代码
[a, b, c, a, b, c, NaN]
 Categories (3, object): [c, b, a]

在这里,第二个参数表示类别。因此,类别中不存在的任何值都将被视为NaN。

现在,看看以下示例:

python 复制代码
 import pandas as pd
 cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
 print(cat)

运行结果

python 复制代码
 [a, b, c, a, b, c, NaN]
 Categories (3, object): [c < b < a]

从逻辑上讲,该顺序意味着a大于b且b大于c。

4、描述

使用.describe()的分类数据的命令,我们得到相似的输出到一个系列或数据框的的类型的字符串。

python 复制代码
import pandas as pd
 import numpy as np
 cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})
 print(df.describe())
 print(df["cat"].describe())

运行结果

python 复制代码
   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

5、获取分类的属性

obj.cat.categories命令用于获取对象的类别。

python 复制代码
import pandas as pd
 import numpy as np
 s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 print(s.categories)

运行结果

python 复制代码
 Index([u'b', u'a', u'c'], dtype='object')

obj.ordered命令用于获取对象的顺序。

python 复制代码
**import pandas as pd
 import numpy as np
 cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 print(cat.ordered)**

运行结果:

python 复制代码
 False

该函数返回false,因为我们未指定任何顺序。

6、重命名分类

重命名类别是通过向series.cat.categories series.cat.categories属性分配新值来完成的。

python 复制代码
 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 s.cat.categories = ["Group %s" % g for g in s.cat.categories]
 print(s.cat.categories)

运行结果

python 复制代码
Index([u'Group a', u'Group b', u'Group c'], dtype='object')

初始类别[a,b,c]由对象的s.cat.categories属性更新。

7、追加新类别

使用Categorical.add.categories()方法,可以追加新类别。

python 复制代码
 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 s = s.cat.add_categories([4])
 print(s.cat.categories)

运行结果

python 复制代码
Index([u'a', u'b', u'c', 4], dtype='object')

8、删除类别

使用Categorical.remove_categories()方法,可以删除不需要的类别。

python 复制代码
 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 print(("Original object:"))
 print(s)
 print(("After removal:"))
 print(s.cat.remove_categories("a"))

运行结果

python 复制代码
 Original object:
 0 a
 1 b
 2 c
 3 a
 dtype: category
 Categories (3, object): [a, b, c]
 After removal:
 0 NaN
 1 b
 2 c
 3 NaN
 dtype: category
 Categories (2, object): [b, c]

9、分类数据比较

在三种情况下可以将分类数据与其他对象进行比较:

将等于(和!=)与长度与分类数据相同的类似列表的对象(列表,序列,数组,...)进行比较。
当排序 True并且类别相同时,将类别数据与另一个类别系列的所有比较(==,!=,>,> =, <和<=)。< div>

分类数据与标量的所有比较。

看下面的实例:

python 复制代码
 import pandas as pd
 cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
 cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)
 print(cat>cat1)

运行结果

python 复制代码
 0  False
 1  False
 2  True
 dtype: bool
相关推荐
幽兰的天空9 分钟前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
HPC_fac130520678161 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
网易独家音乐人Mike Zhou4 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书4 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
zhixingheyi_tian4 小时前
Spark 之 Aggregate
大数据·分布式·spark
PersistJiao4 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
小二·5 小时前
java基础面试题笔记(基础篇)
java·笔记·python
宅小海7 小时前
scala String
大数据·开发语言·scala
朝九晚五ฺ7 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
小白的白是白痴的白7 小时前
11.17 Scala练习:梦想清单管理
大数据