返回顶部
首页 > 资讯 > 精选 >Pandas数据类型中category的用法
  • 535
分享到

Pandas数据类型中category的用法

2023-06-20 12:06:37 535人浏览 安东尼
摘要

本篇内容主要讲解“pandas数据类型中cateGory的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas数据类型中category的用法”吧!创建category使用Series

本篇内容主要讲解“pandas数据类型中cateGory的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas数据类型中category的用法”吧!

创建category

使用Series创建

在创建Series的同时添加dtype="category"就可以创建好category了。category分为两部分,一部分是order,一部分是字面量:

In [1]: s = pd.Series(["a", "b", "c", "a"], dtype="category")In [2]: sOut[2]: 0    a1    b2    c3    adtype: categoryCategories (3, object): ['a', 'b', 'c']

可以将DF中的Series转换为category:

In [3]: df = pd.DataFrame({"A": ["a", "b", "c", "a"]})In [4]: df["B"] = df["A"].astype("category")In [5]: df["B"]Out[32]: 0    a1    b2    c3    aName: B, dtype: categoryCategories (3, object): [a, b, c]

可以创建好一个pandas.Categorical ,将其作为参数传递给Series:

In [10]: raw_cat = pd.Categorical(   ....:     ["a", "b", "c", "a"], categories=["b", "c", "d"], ordered=False   ....: )   ....: In [11]: s = pd.Series(raw_cat)In [12]: sOut[12]: 0    NaN1      b2      c3    NaNdtype: categoryCategories (3, object): ['b', 'c', 'd']

使用DF创建

创建DataFrame的时候,也可以传入 dtype="category":

In [17]: df = pd.DataFrame({"A": list("abca"), "B": list("bccd")}, dtype="category")In [18]: df.dtypesOut[18]: A    categoryB    categorydtype: object

DF中的A和B都是一个category:

In [19]: df["A"]Out[19]: 0    a1    b2    c3    aName: A, dtype: categoryCategories (3, object): ['a', 'b', 'c']In [20]: df["B"]Out[20]: 0    b1    c2    c3    dName: B, dtype: categoryCategories (3, object): ['b', 'c', 'd']

或者使用df.astype("category")将DF中所有的Series转换为category:

In [21]: df = pd.DataFrame({"A": list("abca"), "B": list("bccd")})In [22]: df_cat = df.astype("category")In [23]: df_cat.dtypesOut[23]: A    categoryB    categorydtype: object

创建控制

默认情况下传入dtype='category' 创建出来的category使用的是默认值:

Categories是从数据中推断出来的。

Categories是没有大小顺序的。

可以显示创建CategoricalDtype来修改上面的两个默认值:

In [26]: from pandas.api.types import CategoricalDtypeIn [27]: s = pd.Series(["a", "b", "c", "a"])In [28]: cat_type = CategoricalDtype(categories=["b", "c", "d"], ordered=True)In [29]: s_cat = s.astype(cat_type)In [30]: s_catOut[30]: 0    NaN1      b2      c3    NaNdtype: categoryCategories (3, object): ['b' < 'c' < 'd']

同样的CategoricalDtype还可以用在DF中:

In [31]: from pandas.api.types import CategoricalDtypeIn [32]: df = pd.DataFrame({"A": list("abca"), "B": list("bccd")})In [33]: cat_type = CategoricalDtype(categories=list("abcd"), ordered=True)In [34]: df_cat = df.astype(cat_type)In [35]: df_cat["A"]Out[35]: 0    a1    b2    c3    aName: A, dtype: categoryCategories (4, object): ['a' < 'b' < 'c' < 'd']In [36]: df_cat["B"]Out[36]: 0    b1    c2    c3    dName: B, dtype: categoryCategories (4, object): ['a' < 'b' < 'c' < 'd']

转换为原始类型

使用Series.astype(original_dtype) 或者 np.asarray(categorical)可以将Category转换为原始类型:

In [39]: s = pd.Series(["a", "b", "c", "a"])In [40]: sOut[40]: 0    a1    b2    c3    adtype: objectIn [41]: s2 = s.astype("category")In [42]: s2Out[42]: 0    a1    b2    c3    adtype: categoryCategories (3, object): ['a', 'b', 'c']In [43]: s2.astype(str)Out[43]: 0    a1    b2    c3    adtype: objectIn [44]: np.asarray(s2)Out[44]: array(['a', 'b', 'c', 'a'], dtype=object)

categories的操作

获取category的属性

Categorical数据有 categoriesordered 两个属性。可以通过s.cat.categoriess.cat.ordered来获取:

In [57]: s = pd.Series(["a", "b", "c", "a"], dtype="category")In [58]: s.cat.categoriesOut[58]: Index(['a', 'b', 'c'], dtype='object')In [59]: s.cat.orderedOut[59]: False

重排category的顺序:

In [60]: s = pd.Series(pd.Categorical(["a", "b", "c", "a"], categories=["c", "b", "a"]))In [61]: s.cat.categoriesOut[61]: Index(['c', 'b', 'a'], dtype='object')In [62]: s.cat.orderedOut[62]: False

重命名categories

通过给s.cat.categories赋值可以重命名categories:

In [67]: s = pd.Series(["a", "b", "c", "a"], dtype="category")In [68]: sOut[68]: 0    a1    b2    c3    adtype: categoryCategories (3, object): ['a', 'b', 'c']In [69]: s.cat.categories = ["Group %s" % g for g in s.cat.categories]In [70]: sOut[70]: 0    Group a1    Group b2    Group c3    Group adtype: categoryCategories (3, object): ['Group a', 'Group b', 'Group c']

使用rename_categories可以达到同样的效果:

In [71]: s = s.cat.rename_categories([1, 2, 3])In [72]: sOut[72]: 0    11    22    33    1dtype: categoryCategories (3, int64): [1, 2, 3]

或者使用字典对象:

# You can also pass a dict-like object to map the renamingIn [73]: s = s.cat.rename_categories({1: "x", 2: "y", 3: "z"})In [74]: sOut[74]: 0    x1    y2    z3    xdtype: categoryCategories (3, object): ['x', 'y', 'z']

使用add_categories添加category

可以使用add_categories来添加category:

In [77]: s = s.cat.add_categories([4])In [78]: s.cat.categoriesOut[78]: Index(['x', 'y', 'z', 4], dtype='object')In [79]: sOut[79]: 0    x1    y2    z3    xdtype: categoryCategories (4, object): ['x', 'y', 'z', 4]

使用remove_categories删除category

In [80]: s = s.cat.remove_categories([4])In [81]: sOut[81]: 0    x1    y2    z3    xdtype: categoryCategories (3, object): ['x', 'y', 'z']

删除未使用的cagtegory

In [82]: s = pd.Series(pd.Categorical(["a", "b", "a"], categories=["a", "b", "c", "d"]))In [83]: sOut[83]: 0    a1    b2    adtype: categoryCategories (4, object): ['a', 'b', 'c', 'd']In [84]: s.cat.remove_unused_categories()Out[84]: 0    a1    b2    adtype: categoryCategories (2, object): ['a', 'b']

重置cagtegory

使用set_categories()可以同时进行添加和删除category操作:

In [85]: s = pd.Series(["one", "two", "four", "-"], dtype="category")In [86]: sOut[86]: 0     one1     two2    four3       -dtype: categoryCategories (4, object): ['-', 'four', 'one', 'two']In [87]: s = s.cat.set_categories(["one", "two", "three", "four"])In [88]: sOut[88]: 0     one1     two2    four3     NaNdtype: categoryCategories (4, object): ['one', 'two', 'three', 'four']

category排序

如果category创建的时候带有 ordered=True , 那么可以对其进行排序操作:

In [91]: s = pd.Series(["a", "b", "c", "a"]).astype(CategoricalDtype(ordered=True))In [92]: s.sort_values(inplace=True)In [93]: sOut[93]: 0    a3    a1    b2    cdtype: categoryCategories (3, object): ['a' < 'b' < 'c']In [94]: s.min(), s.max()Out[94]: ('a', 'c')

可以使用 as_ordered() 或者 as_unordered() 来强制排序或者不排序:

In [95]: s.cat.as_ordered()Out[95]: 0    a3    a1    b2    cdtype: categoryCategories (3, object): ['a' < 'b' < 'c']In [96]: s.cat.as_unordered()Out[96]: 0    a3    a1    b2    cdtype: categoryCategories (3, object): ['a', 'b', 'c']

重排序

使用Categorical.reorder_categories() 可以对现有的category进行重排序:

In [103]: s = pd.Series([1, 2, 3, 1], dtype="category")In [104]: s = s.cat.reorder_categories([2, 3, 1], ordered=True)In [105]: sOut[105]: 0    11    22    33    1dtype: categoryCategories (3, int64): [2 < 3 < 1]

多列排序

sort_values 支持多列进行排序:

In [109]: dfs = pd.DataFrame(   .....:     {   .....:         "A": pd.Categorical(   .....:             list("bbeebbaa"),   .....:             categories=["e", "a", "b"],   .....:             ordered=True,   .....:         ),   .....:         "B": [1, 2, 1, 2, 2, 1, 2, 1],   .....:     }   .....: )   .....: In [110]: dfs.sort_values(by=["A", "B"])Out[110]:    A  B2  e  13  e  27  a  16  a  20  b  15  b  11  b  24  b  2

比较操作

如果创建的时候设置了ordered==True ,那么category之间就可以进行比较操作。支持 ==, !=, >, >=, <, 和 <=这些操作符。

In [113]: cat = pd.Series([1, 2, 3]).astype(CategoricalDtype([3, 2, 1], ordered=True))In [114]: cat_base = pd.Series([2, 2, 2]).astype(CategoricalDtype([3, 2, 1], ordered=True))In [115]: cat_base2 = pd.Series([2, 2, 2]).astype(CategoricalDtype(ordered=True))In [119]: cat > cat_baseOut[119]: 0     True1    False2    Falsedtype: boolIn [120]: cat > 2Out[120]: 0     True1    False2    Falsedtype: bool

其他操作

Cagetory本质上来说还是一个Series,所以Series的操作category基本上都可以使用,比如: Series.min(), Series.max() 和 Series.mode()。

value_counts:

In [131]: s = pd.Series(pd.Categorical(["a", "b", "c", "c"], categories=["c", "a", "b", "d"]))In [132]: s.value_counts()Out[132]: c    2a    1b    1d    0dtype: int64

DataFrame.sum():

In [133]: columns = pd.Categorical(   .....:     ["One", "One", "Two"], categories=["One", "Two", "Three"], ordered=True   .....: )   .....: In [134]: df = pd.DataFrame(   .....:     data=[[1, 2, 3], [4, 5, 6]],   .....:     columns=pd.MultiIndex.from_arrays([["A", "B", "B"], columns]),   .....: )   .....: In [135]: df.sum(axis=1, level=1)Out[135]:    One  Two  Three0    3    3      01    9    6      0

Groupby:

In [136]: cats = pd.Categorical(   .....:     ["a", "b", "b", "b", "c", "c", "c"], categories=["a", "b", "c", "d"]   .....: )   .....: In [137]: df = pd.DataFrame({"cats": cats, "values": [1, 2, 2, 2, 3, 4, 5]})In [138]: df.groupby("cats").mean()Out[138]:       valuescats        a        1.0b        2.0c        4.0d        NaNIn [139]: cats2 = pd.Categorical(["a", "a", "b", "b"], categories=["a", "b", "c"])In [140]: df2 = pd.DataFrame(   .....:     {   .....:         "cats": cats2,   .....:         "B": ["c", "d", "c", "d"],   .....:         "values": [1, 2, 3, 4],   .....:     }   .....: )   .....: In [141]: df2.groupby(["cats", "B"]).mean()Out[141]:         valuescats B        a    c     1.0     d     2.0b    c     3.0     d     4.0c    c     NaN     d     NaN

Pivot tables:

In [142]: raw_cat = pd.Categorical(["a", "a", "b", "b"], categories=["a", "b", "c"])In [143]: df = pd.DataFrame({"A": raw_cat, "B": ["c", "d", "c", "d"], "values": [1, 2, 3, 4]})In [144]: pd.pivot_table(df, values="values", index=["A", "B"])Out[144]:      valuesA B        a c       1  d       2b c       3  d       4

到此,相信大家对“Pandas数据类型中category的用法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Pandas数据类型中category的用法

本文链接: https://lsjlt.com/news/296455.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Pandas数据类型中category的用法
    本篇内容主要讲解“Pandas数据类型中category的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas数据类型中category的用法”吧!创建category使用Series...
    99+
    2023-06-20
  • Pandas数据类型之category的用法
    创建category 使用Series创建 在创建Series的同时添加dtype="category"就可以创建好category了。category分为两部分,一部分是order,一部分是字面量: In [1...
    99+
    2022-06-02
    category的用法 Python pandas
  • pandas中如何创建category类型数据
    这篇文章主要介绍了pandas中如何创建category类型数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 T1、直接创建 category类型数据可知,在ca...
    99+
    2023-06-14
  • 详细介绍在pandas中创建category类型数据的几种方法
    在pandas中创建category类型数据的几种方法之详细攻略  T1、直接创建 category类型数据 可知,在category类型数据中,每一个元素的值要么是预设...
    99+
    2024-04-02
  • pandas中的series数据类型
    import pandas as pd import numpy as np import names ''' 写在前面的话: 1、series与array类型的不同之处为series有索引,而另一个没有;series中的数据...
    99+
    2023-01-30
    数据类型 pandas series
  • Pandas数据类型转换df.astype()及数据类型查看df.dtypes的使用
    目录1.数据框字段类型查看:df.dtypes2.维度查看df.shape:3.数据框的策略基本信息df.info():4.某一列格式df['列名'].dtype:5...
    99+
    2024-04-02
  • 保留数据类型的空 pandas 数据框
    问题内容 我想用保留的数据类型创建一个空的 df 作为模板。代码如下: import pandas as pd import datetime from dataclasses imp...
    99+
    2024-02-22
  • pandas数据类型之Series的具体使用
    目录Series类型Series的三种创建方式通过数组创建Series创建指定索引列的Series使用字典创建标量创建Series对象Series的常见操作Series的值访问访问整...
    99+
    2024-04-02
  • Pandas中Series的创建及数据类型转换
    目录 一、实战场景二、主要知识点三、菜鸟实战1、创建 python 文件,用Numpy创建Series2、转换Series的数据类型 四、补充1、创建 pytho...
    99+
    2024-04-02
  • pandas怎么查看数据类型
    要查看数据类型,可以使用DataFrame的dtypes属性。示例如下: import pandas as pd # 创建一个Da...
    99+
    2024-04-02
  • pandas中对文本类型数据的处理的方法有哪些
    本篇内容介绍了“pandas中对文本类型数据的处理的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.英文字母大小写转换及填充s&...
    99+
    2023-06-25
  • pandas中对文本类型数据的处理小结
    目录1.英文字母大小写转换及填充2.字符串合并与拆分2.1 多列字符串合并2.2 一列 列表形式的文本合并为一列2.3 一列字符串与自身合并成为一列2.4 一列字符串拆分为多列2.4...
    99+
    2024-04-02
  • python-pandas创建Series数据类型的操作
    1.什么是pandas 2.查看pandas版本信息 print(pd.__version__) 输出: 0.24.1 3.常见数据类型 常见的数据类型: - 一维: ...
    99+
    2024-04-02
  • 【Python】【pandas】打印 DataFrame 的每一列数据类型。
    方法一: 可以使用 dtypes 属性来打印 DataFrame 的每一列数据类型。dtypes 属性返回一个 Series,其中包含每个列的名称和对应的数据类型。 以下是打印 DataFrame 每一列数据类型的示例代码: print(d...
    99+
    2023-09-04
    python pandas 开发语言
  • 怎么在python中利用pandas创建一个Series数据类型
    今天就跟大家聊聊有关怎么在python中利用pandas创建一个Series数据类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内...
    99+
    2023-06-14
  • tensorflow中的数据类型dtype用法说明
    Tensorflow中,主要有以下几种数据类型(dtype),在旧版本中,不用加tf也能使用。 有符号整型 tf.int8:8位整数。 tf.int16:16位整数。 tf.int3...
    99+
    2024-04-02
  • Golang中map数据类型的使用方法
    目录前言案例mapmap定义map声明map的操作总结前言 今天咱们来学习一下golang中的map数据类型,单纯的总结一下基本语法和使用场景,也不具体深入底层。map类型是什么呢?...
    99+
    2024-04-02
  • python数据处理之Pandas类型转换的实现
    目录转换为字符串类型转换为数值类型转为数值类型还可以使用to_numeric()函数分类数据(Category)数据类型小结转换为字符串类型 tips['sex_str'] = ti...
    99+
    2024-04-02
  • MySQL数据类型DECIMAL用法
    前言:  当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型,可能大部分同学只是对DECIMAL类型略有了解,其中的细节还不甚清楚,本篇文章将从零开始,为你讲述DECI...
    99+
    2024-04-02
  • MySQL中常用的数据类型
    在写sql语句的时候,数据类型是避不可少的一个环节,以下是我在学习的过程中总结的数据类型,仅供参考: 数值类型   类型 有符号(signed)范围 无符号(unsigned)范围 描述 tinyint (-128,127)...
    99+
    2021-06-28
    MySQL中常用的数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作