Pandas分类数据 Pandas Timedelta Pandas可视化 通常实时数据包含重复的文本列。诸如性别,国家和代码等功能总是重复的。这些是分类数据的例子。 分类变量只能采用有限的数量,通常为固定数量的可能值。除了固定长度,分类数据可能有顺序但不能执行数字操作。分类是Pandas数据类型。 分类数据类型在以下情况下非常有用 - 一个字符串变量,只包含几个不同的值。将这样一个字符串变量转换为分类变量将节省一些内存。 变量的词汇顺序与逻辑顺序(“one”,“two”,“three”)不同。通过转换为分类并指定类别的顺序,排序和最小/最大将使用逻辑顺序而不是词法顺序。 作为其他python库的信号,该列应被视为分类变量(例如,使用合适的统计方法或绘图类型)。 对象创建 分类对象可以通过多种方式创建。下面介绍了不同的方式 - 类别 通过在pandas对象创建中将dtype指定为“类别”。 import pandas as pd s = pd.Series(["a","b","c","a"], dtype="category") print s 其 输出 如下 - 0 a 1 b 2 c 3 a dtype: category Categories (3, object): [a, b, c] 传递给序列对象的元素数量是四个,但类别只有三个。在输出类别中观察相同。 pd.Categorical 使用标准Pandas分类构造函数,我们可以创建一个类别对象。 pandas.Categorical(values, categories, ordered) 我们举个例子 - import pandas as pd cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c']) print cat 其 输出 如下 - [a, b, c, a, b, c] Categories (3, object): [a, b, c] 让我们举另一个例子 - import pandas as pd cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a']) print cat 其 输出 如下 - [a, b, c, a, b, c, NaN] Categories (3, object): [c, b, a] 这里,第二个参数表示类别。因此,这些类别中不存在的任何值将被视为 NaN 。 现在,看看下面的例子 - import pandas as pd cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True) print cat 其 输出 如下 - [a, b, c, a, b, c, NaN] Categories (3, object): [c < b < a] 从逻辑上讲,订单意味着, a 大于 b , b 大于 c 。 描述 使用 .describe() 的分类数据的命令,我们得到相似的输出到一个 序列 或 数据框 的的 类型 的字符串。 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() 其 输出 如下 - 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.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 其 输出 如下 - Index([u'b', u'a', u'c'], dtype='object') 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 其 输出 如下 - False 该函数返回 false, 因为我们没有指定任何顺序。 重命名类别 通过将新值分配给 series.cat.categories 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 其 输出 如下 - Index([u'Group a', u'Group b', u'Group c'], dtype='object') 初始类别 [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 其 输出 如下 - Index([u'a', u'b', u'c', 4], dtype='object') 删除类别 使用 Categorical.remove_categories() 方法,可以删除不需要的类别。 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") 其 输出 如下 - 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] 分类数据的比较 在三种情况下可能将分类数据与其他对象进行比较 - 将等号(==和!=)与类别数据相同长度的类似列表的对象(列表,序列,数组...)进行比较。 所有比较(==,!=,>,> =,<,和<=)分类数据到另一个分类序列,当订单== 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 其 输出 如下 - 0 False 1 False 2 True dtype: bool Pandas Timedelta Pandas可视化