通常实时的数据包括重复的文本列。例如:性别,国家和代码等特征总是重复的。这些是分类数据的例子。

分类变量只能采用有限的数量,而且通常是固定的数量。除了固定长度,分类数据可能有顺序,但不能执行数字操作。 分类是Pandas数据类型。

分类数据类型在以下情况下非常有用 -

  • 一个字符串变量,只包含几个不同的值。将这样的字符串变量转换为分类变量将会节省一些内存。
  • 变量的词汇顺序与逻辑顺序("one""two""three")不同。 通过转换为分类并指定类别上的顺序,排序和最小/最大将使用逻辑顺序,而不是词法顺序。
  • 作为其他python库的一个信号,这个列应该被当作一个分类变量(例如,使用合适的统计方法或plot类型)。

对象创建

分类对象可以通过多种方式创建。下面介绍了不同的方法 -

类别/分类

通过在pandas对象创建中将dtype指定为“category”

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]
Shell

传递给系列对象的元素数量是四个,但类别只有三个。观察相同的输出类别。

pd.Categorical

使用标准Pandas分类构造函数,我们可以创建一个类别对象。语法如下 -

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]
Shell

再举一个例子 -

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]
Shell

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

现在,看看下面的例子 -

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]
Shell

从逻辑上讲,排序(ordered)意味着,a大于bb大于c

描述

使用分类数据上的.describe()命令,可以得到与类型字符串的Series或DataFrame类似的输出。

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 ("=============================")
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
Shell

获取类别的属性

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

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(['b', 'a', 'c'], dtype='object')
Shell

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

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
Shell

该函数返回结果为:False,因为这里没有指定任何顺序。

重命名类别

重命名类别是通过将新值分配给series.cat.categories属性来完成的。参考以下示例代码 -

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(['Group a', 'Group b', 'Group c'], dtype='object')
Shell

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

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

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(['a', 'b', 'c', 4], dtype='object')
Shell

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

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print (s)
print("=====================================")
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]
Shell

分类数据的比较

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

  • 将等号(==!=)与类别数据相同长度的类似列表的对象(列表,系列,数组…)进行比较。
  • ordered==True和类别是相同时,所有比较(==!=>>=<,和<=)分类数据到另一个分类系列。
  • 将分类数据与标量进行比较。

看看下面的例子 -

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

Pandas分类数据的更多相关文章

  1. 【笔记】Pandas分类数据详解

    [笔记]Pandas分类数据详解 Pandas  Pandas分类数据详解|轻松玩转Pandas(5) 参考:Pandas分类数据详解|轻松玩转Pandas(5)

  2. Pandas分类数据和顺序数据转换为标志变量

    #导入pandas库 import pandas as pd #OneHotEncoder用来将数值型类别变量转换为0-1的标志性变量 #LabelEncoder用来将字符串型变量转换为数值型变量 f ...

  3. Pandas | 23 分类数据

    通常实时的数据包括重复的文本列.例如:性别,国家和代码等特征总是重复的.这些是分类数据的例子. 分类变量只能采用有限的数量,而且通常是固定的数量.除了固定长度,分类数据可能有顺序,但不能执行数字操作. ...

  4. Python图表数据可视化Seaborn:2. 分类数据可视化-分类散点图|分布图(箱型图|小提琴图|LV图表)|统计图(柱状图|折线图)

    1. 分类数据可视化 - 分类散点图 stripplot( ) / swarmplot( ) sns.stripplot(x="day",y="total_bill&qu ...

  5. Pandas分类

    Pandas分类 categorical data是指分类数据:数据类型为:男女.班级(一班.二班).省份(河北.江苏等),若使用赋值法给变量赋值,例如(男=1,女=0),数字1,0之间没有大小之分, ...

  6. seaborn分类数据可视化

    转载:https://cloud.tencent.com/developer/article/1178368 seaborn针对分类型的数据有专门的可视化函数,这些函数可大致分为三种: 分类数据散点图 ...

  7. Pandas分类(category)数据处理

    分类(Category)数据:直白来说,就是取值为有限的,或者说是固定数量的可能值.例如:性别.血型 指定数据类型构建分类数据 dtype="category" 以血型为例,创建一 ...

  8. seaborn教程4——分类数据可视化

    https://segmentfault.com/a/1190000015310299 Seaborn学习大纲 seaborn的学习内容主要包含以下几个部分: 风格管理 绘图风格设置 颜色风格设置 绘 ...

  9. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

随机推荐

  1. RPC远程过程调用概念及实现

    RPC框架学习笔记 >>什么是RPC RPC 的全称是 Remote Procedure Call 是一种进程间通信方式. 它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过 ...

  2. Python全栈day24(面向对象编程作业作业_定义学校老师课程班级学生类)

    面向对象作业 作业_定义学校老师课程班级学生类.py #面向对象编程作业,定义学校老师课程班级学生类 #定义几个类,尽可能定义多的数据属性及函数属性 class School: def __init_ ...

  3. iOS微信打开App

    传统的方式是通过URL Scheme的方式,但是iOS9以后又出了新的更完美的方式Universal Links. 传统的URL Scheme方式微信内置的浏览器都是封锁了所有它投资的公司之外的,只有 ...

  4. attributes["wv"].nodeValue

    w 获取自定义属性的值 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  5. transaction 数据库事务 roolback 回滚

    事务是恢复和并发控制的基本单位 https://baike.baidu.com/item/数据库事务/9744607 事务有三种模型: 1.隐式事务是指每一条数据操作语句都自动地成为一个事务,事务的开 ...

  6. python进程间数据不共享(示例演示)

    import multiprocessing data_list = [] def task(arg): data_list.append(arg) print(data_list) def run( ...

  7. MySQL中的datetime与timestamp比较(转载)

    原文地址:http://database.51cto.com/art/200905/124240.htm 相同 显示 TIMESTAMP列的显示格式与DATETIME列相同.换句话说,显示宽度固定在1 ...

  8. Pimpl Idiom /handle body idiom

    在读<Effective C++>和项目源代码时,看到pImpl Idiom.它可以用来降低文件间的编译依赖关系,通过把一个Class分成两个Class,一个只提供接口,另一个负责实现该接 ...

  9. Linux指令od和hexdump

    Linux指令:od (octal dump) 示例用法:od -c hello Linux指令:od od命令用户通常使用od命令查看特殊格式的文件内容.通过指定该命令的不同选项可以以十进制.八进制 ...

  10. hadoop10---消息队列

    java消息队列 BlockingQueue也是java.util.concurrent下的主要用来控制线程同步的工具.锁也是用来控制线程同步的,释放锁的时候谁拿到了锁是没有预测的,所以谁拿到了锁是不 ...