当前位置: 代码网 > it编程>前端脚本>Python > 数据分析-Pandas分类数据的类别处理

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

2024年08月01日 Python 我要评论
数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律?实验数据分析处理,股票序列,时间序列,信号序列,有时候表格的数据并不完全是数值类型,也有可能是字符串,或者其他数据,需要做分类处理。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

导入关键模块

import pandas as pd
import numpy as np

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

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

数据类别的统计描述

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

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

类别相等

什么事相同的类别?

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

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

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'

in [52]: c1 == "category"
out[52]: true

类别的使用

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

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

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

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()完成的:

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()增加新的类别:

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()删除类别。

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

删除没用类别

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

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()

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博客

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com