数据分析-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如何进行数据的分类呢?

下面对 pandas 分类数据类型做个简单的介绍。

分类数据

Categoricals 是 pandas 的一种数据类型,对应统计分类变量。通常,统计分类变量是有限的、固定的、 可能数值。例如,性别, 社会阶层,血型,颜色,种类,评价,评级等等。

与统计分类变量相比,分类数据还可能有一个顺序(例如 "非常同意"与"同意","第一次观察"与"第二次观察"),但不能进行算术计算,比如,加减乘除。

所有的数据,要么在分类数据中,要么不在。分类数据如果有顺序,那么是按定义的值进行排序,而不是按照词法顺序,比如字母顺序,数字顺序。实际上在内部,其数据结构是由一个真正数值的数组和一个整数数组构成,整数数组指向真正值的数组。 哈哈,有点绕。

分类的作用

categorical 数据类型在以下情况下很有用:

  • 仅由几个不同值组成的字符串变量。字符串变量转换为分类变量可节省一些内存。
  • 变量的逻辑顺序和词法顺序不同,通过转换为分类并指定类别的顺序,这样可以使用逻辑顺序进行排序, min/max 操作。
  • 提示 Python 库,表明此列应被视为分类变量操作(例如,使用合适的统计方法或绘图类型)。

分类对象创建

基于Series

分类或者列,可以通过多种方式创建。

最简单的方式,通过在构造时指定:dtype="category"

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

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

还可以通过把现有序列 astype 转换为 dtype:Series``category

python 复制代码
In [3]: df = pd.DataFrame({"A": ["a", "b", "c", "a"]})
In [4]: df["B"] = df["A"].astype("category")
In [5]: df

Out[5]: 
   A  B
0  a  a
1  b  b
2  c  c
3  a  a

此外,通过使用特殊函数,例如 cut(),将分组数据到 离散的箱。

python 复制代码
In [6]: df = pd.DataFrame({"value": np.random.randint(0, 100, 20)})
In [7]: labels = ["{0} - {1}".format(i, i + 9) for i in range(0, 100, 10)]
In [8]: df["group"] = pd.cut(df.value, range(0, 105, 10), right=False, labels=labels)
In [9]: df.head(10)

Out[9]: 
   value    group
0     65  60 - 69
1     49  40 - 49
2     56  50 - 59
3     43  40 - 49
4     43  40 - 49
5     91  90 - 99
6     32  30 - 39
7     87  80 - 89
8     36  30 - 39
9      8    0 - 9

通过传递一个pandas.Categorical 对象给序列或者 DataFrame 。

python 复制代码
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]: s

Out[12]: 
0    NaN
1      b
2      c
3    NaN
dtype: category
Categories (3, object): ['b', 'c', 'd']

In [13]: df = pd.DataFrame({"A": ["a", "b", "c", "a"]})
In [14]: df["B"] = raw_cat
In [15]: df

Out[15]: 
   A    B
0  a  NaN
1  b    b
2  c    c
3  a  NaN

分类数据具有特定的数据类型:category

In [16]: df.dtypes
Out[16]: 
A      object
B    category
dtype: object

基于DataFrame

与序列转换为分类数据类似,既可以在构造期间转换,也可以在构造完成之后把所有列批量转换。

在构造函数中,是通过指定类型参数来在构造过程中完成:dtype="category"

python 复制代码
In [17]: df = pd.DataFrame({"A": list("abca"), "B": list("bccd")}, dtype="category")
In [18]: df.dtypes

Out[18]: 
A    category
B    category
dtype: object

需要注意的是,每列中存在的类别可能是不同的;因为转换是逐列完成的,所以只有给定列中存在的标签是有类别:

python 复制代码
In [19]: df["A"]

Out[19]: 
0    a
1    b
2    c
3    a
Name: A, dtype: category
Categories (3, object): ['a', 'b', 'c']

In [20]: df["B"]

Out[20]: 
0    b
1    c
2    c
3    d
Name: B, dtype: category
Categories (3, object): ['b', 'c', 'd']

同样地,现有列中的所有列都可以使用以下命令 astype() 转换:

python 复制代码
In [21]: df = pd.DataFrame({"A": list("abca"), "B": list("bccd")})
In [22]: df_cat = df.astype("category")
In [23]: df_cat.dtypes

Out[23]: 
A    category
B    category
dtype: object

同样的,这个转换也是逐列完成的:

In [24]: df_cat["A"]
Out[24]: 
0    a
1    b
2    c
3    a
Name: A, dtype: category
Categories (3, object): ['a', 'b', 'c']

In [25]: df_cat["B"]
Out[25]: 
0    b
1    c
2    c
3    d
Name: B, dtype: category
Categories (3, object): ['b', 'c', 'd']

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

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

觉得有用 收藏 收藏 收藏

点个赞 点个赞 点个赞

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

相关推荐
梦想画家3 小时前
DuckDB:pg_duckdb集成DuckDB和PostgreSQL实现高效数据分析
postgresql·数据分析·duckdb·pg_duckdb
終不似少年遊*5 小时前
美国加州房价数据分析02
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
BJ_bafangonline6 小时前
SPSS上传数据有缺失怎么办?
数据分析
赵钰老师9 小时前
【R语言遥感技术】“R+遥感”的水环境综合评价方法
开发语言·数据分析·r语言
Lx35210 小时前
Pandas数据重命名:列名与索引为标题
后端·python·pandas
小白学大数据11 小时前
高级技术文章:使用 Kotlin 和 Unirest 构建高效的 Facebook 图像爬虫
爬虫·数据分析·kotlin
lovelin+v175030409661 天前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
道一云黑板报1 天前
Flink集群批作业实践:七析BI批作业执行
大数据·分布式·数据分析·flink·kubernetes
数据爬坡ing1 天前
小白考研历程:跌跌撞撞,起起伏伏,五个月备战历程!!!
大数据·笔记·考研·数据分析
醒了就刷牙1 天前
transformer用作分类任务
深度学习·分类·transformer