分类数据

本节介绍分类数据的创建、分类的设置和是否有序的设置。[大谦Excel,dqexcel点com]

创建分类数据

【问题描述】

将Excel文件数据导入到DataFrame并将指定列转换为分类数据。

【示例8-1】

本例使用示例3-17的数据。用pandas导入Excel文件中第1个工作表中的数据,将“大小”列的数据类型转换为分类数据。

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家。文件路径为:D:/Samples/ch08/男裤库存.xlsx。用pandas导入Excel文件中第1个工作表中的数据,引擎为”openpyxl”。将“大小”列的数据类型转换为分类数据。输出数据,输出“大小”列的数据类型。添加代码注释。

2. 代码

  • 根据提示词得到类似下面的代码:
code.python
import pandas as pd
# 读取Excel文件,引擎为"openpyxl"
df = pd.read_excel("D:/Samples/ch08/男裤库存.xlsx", engine="openpyxl")
# 将"大小"列转换为分类数据类型
df["大小"] = df["大小"].astype("category")
# 输出数据
print(df)
# 输出“大小”列的数据类型
print(df.dtypes["大小"])

3. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出数据。

code.python
>>> == RESTART: D:/Samples/1.py =
    产品代码  颜色   大小    库存
0  A0001  白色   XL    30
1  A0001  白色    L   760
2  A0001  白色    M   357
3  A0001  白色    S   730
4  A0001  黑色    M  1520
5  A0001  黑色    L   666
6  A0002  白色  XXL    30
category

【知识点扩展】

本例用astype方法将DataFrame中一个列的数据类型指定为”category”,实现分类数据的创建。

也可以使用pandas的Categorical函数直接创建分类数据,例如:

code.python
>>> import pandas as pd
>>> cat=pd.Categorical(["XL", "L", "M", "S","M","L","XXL"])
>>> s=pd.Series(cat)
>>> s
0     XL
1      L
2      M
3      S
4      M
5      L
6    XXL
dtype: category
Categories(5, object): ['L', 'M', 'S', 'XL', 'XXL']

设置分类值

【问题描述】

设置分类数据的分类值。分类值指的是分类数据中的唯一值。

【示例8-2】

本例使用示例3-17的数据。用pandas导入Excel文件中第1个工作表中的数据,将“大小”列的数据类型转换为分类数据,分类的值包括:"S", "M", "L", "XL","XXL"。

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家。文件路径为:D:/Samples/ch08/男裤库存.xlsx。用pandas导入Excel文件中第1个工作表中的数据,引擎为”openpyxl”。将“大小”列的数据类型转换为分类数据,分类的值包括:"S", "M", "L", "XL","XXL"。输出数据。添加代码注释。

2. 代码

  • 根据提示词得到类似下面的代码:
code.python
import pandas as pd
# 使用pandas读取Excel文件
df = pd.read_excel('D:/Samples/ch08/男裤库存.xlsx', engine='openpyxl')
# 将“大小”列转换为分类类型
df['大小'] = df['大小'].astype('category')
df['大小'].cat.categories = ['S', 'M', 'L', 'XL', 'XXL']
# 输出转换后的数据
print(df)

3. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出数据。

code.python
>>> == RESTART: D:/Samples/1.py =
    产品代码  颜色   大小    库存
0  A0001  白色   XL    30
1  A0001  白色    L   760
2  A0001  白色    M   357
3  A0001  白色    S   730
4  A0001  黑色    M  1520
5  A0001  黑色    L   666
6  A0002  白色  XXL    30

【知识点扩展】

本例中用Series对象的cat.categories参数指定分类值,即

code.python
df['大小'].cat.categories = ['S', 'M', 'L', 'XL', 'XXL']

也可以在用Categorical函数创建分类数据时直接指定分类值,例如:

code.python
>>> import pandas as pd
>>> cat=pd.Categorical(["XL", "L", "M", "S","M","L","XXL"], categories = ['S', 'M', 'L', 'XL', 'XXL'])
>>> s=pd.Series(cat)

有序或无序

【问题描述】

指定分类数据中的值是否有序。

【示例8-3】

本例使用示例3-17的数据。用pandas导入Excel文件中第1个工作表中的数据,将“大小”列的数据类型转换为分类数据,分类的值包括:"S", "M", "L", "XL","XXL",大小顺序为:"S"<"M"<"L"<"XL"<"XXL"。根据“大小”列升序排序。

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家。文件路径为:D:/Samples/ch08/男裤库存.xlsx。用pandas导入Excel文件中第1个工作表中的数据,引擎为”openpyxl”。将“大小”列的数据类型转换为分类数据,分类的值包括:”S”, “M”, “L”, “XL”,”XXL”,大小顺序为:”S”<”M”<”L”<”XL”<”XXL”。根据“大小”列升序排序,输出数据。添加代码注释。
  • ChatGPT提示词模板说明

指定分类数据中的值从小到大排列的顺序。

3. 代码

  • 根据提示词得到类似下面的代码:
code.python
import pandas as pd
# 导入Excel文件中第1个工作表中的数据,引擎为"openpyxl"
df = pd.read_excel("D:/Samples/ch08/男裤库存.xlsx", engine="openpyxl")
# 将“大小”列的数据类型转换为分类数据,分类的值包括:"S", "M", "L", "XL","XXL",大小顺序为:"S"<"M"<"L"<"XL"<"XXL"
size_categories = ["S", "M", "L", "XL", "XXL"]
df["大小"] = pd.Categorical(df["大小"], categories=size_categories, ordered=True)
# 根据“大小”列升序排序,输出数据
df_sorted = df.sort_values("大小")
print(df_sorted)

4. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出

code.python
>>> == RESTART: D:/Samples/1.py =
    产品代码  颜色   大小    库存
3  A0001  白色    S   730
2  A0001  白色    M   357
4  A0001  黑色    M  1520
1  A0001  白色    L   760
5  A0001  黑色    L   666
0  A0001  白色   XL    30
6  A0002  白色  XXL    30

【知识点扩展】

本例使用pandas的Categorical函数创建分类数据,函数中ordered参数的值指定为True,表示分类数据的值是有序的,顺序为ategories参数指定的列表中元素的排列顺序。

指定分类数据的值有序后,就可以根据该列数据对行数据进行排序了。