数据分析-Pandas分类数据的类别处理

数据分析-Pandas分类数据的类别处理

数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律?

数据表,时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。数据分析过程中重新调整,重塑数据表是很重要的技巧,此处选择Titanic数据,以及巴黎、伦敦欧洲城市空气质量监测 N O 2 NO_2 NO2数据作为样例。

数据分析

数据分析-Pandas如何转换产生新列

数据分析-Pandas如何统计数据概况

数据分析-Pandas如何轻松处理时间序列数据

数据分析-Pandas如何选择数据子集

数据分析-Pandas如何重塑数据表-CSDN博客

本文用到的样例数据:

Titanic数据

空气质量监测 N O 2 NO_2 NO2数据

样例代码:

源代码参考 Pandas如何重塑数据表

源代码参考 python数据分析-数据表读写到pandas

导入关键模块

python 复制代码
import pandas as pd
import numpy as np

实验数据分析处理,股票序列,时间序列,信号序列,有时候表格的数据并不完全是数值类型,也有可能是字符串,或者其他数据,需要做分类处理。pandas如何控制数据分类处理呢?需要配置哪些参数?

类别必须是唯一的,否则会引发:ValueError

数据类别的统计描述

在分类数据上使用 DataFrame.describe() 将产生类别的统计输出,包括数量,类别数,数量最多的类别,最多频率。

python 复制代码
In [53]: cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
In [54]: df = pd.DataFrame({"cat": cat, "s": ["a", "c", "c", np.nan]})

In [55]: df.describe()
Out[55]: 
       cat  s
count    3  3
unique   2  2
top      c  c
freq     2  2

In [56]: df["cat"].describe()
Out[56]: 
count     3
unique    2
top       c
freq      2
Name: cat, dtype: object

类别相等

什么事相同的类别?

相同类别有两个条件:一是类别名相同,二是顺序相同。

比具体比较两个实例,只有它们具有相同的类别和相同的顺序,才算相等。当都是无序类别时,可以认为顺序已经没有差异,就只需要比较类别名。

python 复制代码
In [49]: c1 = CategoricalDtype(["a", "b", "c"], ordered=False)

# 相等,因为顺序不需要再考虑,当 ordered=False
In [50]: c1 == CategoricalDtype(["b", "c", "a"], ordered=False)
Out[50]: True

# 不相等,因为第二个的类别时有序的 ordered = True
In [51]: c1 == CategoricalDtype(["a", "b", "c"], ordered=True)
Out[51]: False

另外,有个特殊的情况,即所有类别实例都等于字符串 :CategoricalDtype``'category'

python 复制代码
In [52]: c1 == "category"
Out[52]: True

类别的使用

分类数据有一个特性,列出分类值和排序。如果不手动指定类别和排序,是从传递的参数中推断出来的。s.cat.categories``s.cat.ordered

python 复制代码
In [57]: s = pd.Series(["a", "b", "c", "a"], dtype="category")

In [58]: s.cat.categories
Out[58]: Index(['a', 'b', 'c'], dtype='object')

In [59]: s.cat.ordered
Out[59]: False

也可以按特定顺序把类别传入,新的分类数据不会自动排序,除非你明确指定是有序的。:

python 复制代码
In [60]: s = pd.Series(pd.Categorical(["a", "b", "c", "a"], categories=["c", "b", "a"]))

In [61]: s.cat.categories
Out[61]: Index(['c', 'b', 'a'], dtype='object')

In [62]: s.cat.ordered
Out[62]: False

类别重命名

类别重命名是通过以下方法rename_categories()完成的:

python 复制代码
In [67]: s = pd.Series(["a", "b", "c", "a"], dtype="category")
In [69]: new_categories = ["Group %s" % g for g in s.cat.categories]
In [70]: s = s.cat.rename_categories(new_categories)

In [71]: s
Out[71]: 
0    Group a
1    Group b
2    Group c
3    Group a
dtype: category
Categories (3, object): ['Group a', 'Group b', 'Group c']

# 可以传入字典类型的参数
In [72]: s = s.cat.rename_categories({"Group a": "x", 2: "y", 3: "z"})

In [73]: s
Out[73]: 
0    x
1    Group b
2    Group c
3    x
dtype: category
Categories (3, object): ['x', 'Group b', 'Group c']

类别不得是:NaN,否则会引起错误ValueError

In [75]: try:
   ....:     s = s.cat.rename_categories([1, 2, np.nan])
   ....: except ValueError as e:
   ....:     print("ValueError:", str(e))
   ....: 
ValueError: Categorical categories cannot be null

增加新类别

可以使用方法add_categories()增加新的类别:

python 复制代码
In [76]: s = s.cat.add_categories([4])
In [77]: s.cat.categories
Out[77]: Index(['Group a', 'Group b', 'Group c', 4], dtype='object')

In [78]: s
Out[78]: 
0    Group a
1    Group b
2    Group c
3    Group a
dtype: category
Categories (4, object): ['Group a', 'Group b', 'Group c', 4]

删除类别

可以使用方法remove_categories()删除类别。

python 复制代码
In [79]: s = s.cat.remove_categories([4])

In [80]: s
Out[80]: 
0    Group a
1    Group b
2    Group c
3    Group a
dtype: category
Categories (3, object): ['Group a', 'Group b', 'Group c']

删除没用类别

删除未使用的类别也可以完成:

python 复制代码
In [81]: s = pd.Series(pd.Categorical(["a", "b", "a"], categories=["a", "b", "c", "d"]))

In [82]: s
Out[82]: 
0    a
1    b
2    a
dtype: category
Categories (4, object): ['a', 'b', 'c', 'd']

In [83]: s.cat.remove_unused_categories()
Out[83]: 
0    a
1    b
2    a
dtype: category
Categories (2, object): ['a', 'b']

设置类别

如果想在一条语句既添加新类别,也想删除类别,最简单的就是设置类别:set_categories()

python 复制代码
In [84]: s = pd.Series(["one", "two", "four", "-"], dtype="category")

In [85]: s
Out[85]: 
0     one
1     two
2    four
3       -
dtype: category
Categories (4, object): ['-', 'four', 'one', 'two']

In [86]: s = s.cat.set_categories(["one", "two", "three", "four"])

In [87]: s
Out[87]: 
0     one
1     two
2    four
3     NaN
dtype: category
Categories (4, object): ['one', 'two', 'three', 'four']

以上代码只是一个简单示例,示例代码中的表达式可以根据实际问题进行修改。

后面介绍下其他的展示形式。

觉得有用 收藏 收藏 收藏

点个赞 点个赞 点个赞

End

GPT专栏文章:

GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案

GPT实战系列-LangChain + ChatGLM3构建天气查询助手

大模型查询工具助手之股票免费查询接口

GPT实战系列-简单聊聊LangChain

GPT实战系列-大模型为我所用之借用ChatGLM3构建查询助手

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(一)

GPT实战系列-ChatGLM2模型的微调训练参数解读

GPT实战系列-如何用自己数据微调ChatGLM2模型训练

GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案

GPT实战系列-Baichuan2本地化部署实战方案

GPT实战系列-Baichuan2等大模型的计算精度与量化

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF

GPT实战系列-探究GPT等大模型的文本生成-CSDN博客

相关推荐
Frank牛蛙6 小时前
银行信用卡风险大数据分析与挖掘2024
数据挖掘·数据分析
Kerry_66 小时前
2024年江苏省研究生数学建模科研创新实践大赛C题气象数据高精度融合技术研究论文和代码分析
算法·数学建模·matlab·数据分析
麦田里的稻草人w8 小时前
【数据分析“三剑客”】—— Pandas
数据挖掘·数据分析·pandas
只要名字够长就有猪跟着念8 小时前
数据分析如何在企业中发挥价值
java·数据库·数据分析
LavenLiu8 小时前
【数据分析】DuckDB 是什么及其适用场景?
数据库·oracle·数据分析
紫色沙10 小时前
每天一个数据分析题(四百十一)- 主成分
数据挖掘·数据分析
紫色沙10 小时前
每天一个数据分析题(四百零六)- 因子分析
数据挖掘·数据分析
码界领航11 小时前
(6) 深入理解pandas的核心数据结构:DataFrame全面解析
数据结构·python·numpy·pandas
晨同学032717 小时前
pandas,dataframe使用笔记
笔记·pandas
神奇夜光杯17 小时前
Python酷库之旅-第三方库Pandas(006)
开发语言·人工智能·python·pandas·基础知识·学习和成长·标准库及第三方库