数据分析-pandas分类数据的类别处理
数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律?
数据表,时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。数据分析过程中重新调整,重塑数据表是很重要的技巧,此处选择titanic数据,以及巴黎、伦敦欧洲城市空气质量监测 n o 2 no_2 no2数据作为样例。
数据分析
本文用到的样例数据:
样例代码:
导入关键模块
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实战系列-大模型为我所用之借用chatglm3构建查询助手
gpt实战系列-p-tuning本地化训练chatglm2等llm模型,到底做了什么?(二)
gpt实战系列-p-tuning本地化训练chatglm2等llm模型,到底做了什么?(一)
gpt实战系列-chatglm2部署ubuntu+cuda11+显存24g实战方案
发表评论