pandas(11 分类数据和数据可视化)

news2025/5/9 14:27:29

前面内容:pandas(10 日期和Timedelta) 

目录

一、Python Pandas 分类数据

1.1 pd.Categorical()

1.2 describe()

1.3 获取类别的属性

1.4 分类操作

1.5 分类数据的比较

二、Python Pandas 数据可视化 

2.1 基础绘图:plot

2.2 条形图

2.3 直方图

2.4 箱线图

2.5 面积图

2.6 散点图

2.7 饼图 


一、Python Pandas 分类数据

在 pandas 中,分类数据(Categorical data) 是一种特殊的数据类型,它通过将数据分为不同的类别来有效地减少内存使用并提高性能。它在处理具有有限数量的可能值(如性别、状态、等级等)的列时非常有用。

对象创建

分类对象可以通过多种方式创建。以下是不同的方式描述:

分类

在Pandas对象创建时,将dtype指定为”category”。

 例1: 

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print(s)

运行结果: 

传递给系列对象的元素数量是四个,但类别只有三个。观察输出的类别。 

创建分类数据

你可以使用 pandas.CategoricalSeries.astype('category') 方法将数据转换为分类类型。

1.1 pd.Categorical()

pd.Categorical() pandas 库中的一个功能强大的函数,用于将数据转换为分类类型。 

pd.Categorical()语法

pd.Categorical(values, categories=None, ordered=False, dtype=None)

参数:

  • values: 要转换为分类类型的数据,可以是列表、numpy 数组或者 pandas Series。
  • categories: 一个列表,指定分类的取值。如果没有提供,pandas 会自动推断这些类别。
  • ordered: 布尔值(默认为 False)。如果设置为 True,表示类别之间有顺序(可以进行大于、小于等比较操作)。
  • dtype: 可选的,指定分类的类型,例如 category

例1.2:pd.Categorical() 

import pandas as pd

cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat

运行结果: 

例1.2 : 

import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print(cat)

运行结果:

例1.3: ordered = True

import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print(cat)

运行结果:

1.2 describe()

在分类数据上使用 .describe() 命令,我们得到与 Series 或 DataFrame 类型的字符串相似的输出。

例1.4: df.describe()

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})

print(df.describe())
print('-'*50)
print(df["cat"].describe())

运行结果: 

1.3 获取类别的属性

obj.cat.categories 命令用于获取对象的 类别 。

例1.5:返回分类数据的类别列表 

import pandas as pd
import numpy as np

s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print(s.categories)

运行结果:

例1.6: 否有顺序

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print(cat.ordered)

运行结果:

1.4 分类操作

通过为 series.cat.categories 属性赋新值来重命名分类。

例1.7: 重命名分类

import pandas as pd

# 创建一个包含分类数据的 Series
s = pd.Series(["a", "b", "c", "a"], dtype="category")

# 获取当前类别,并修改它
new_categories = ["Group %s" % g for g in s.cat.categories]

# 使用新的类别创建一个新的 Categorical 类型
s = pd.Series(s.cat.codes, dtype=pd.CategoricalDtype(categories=new_categories, ordered=False))

# 打印更新后的类别
print(s.cat.categories)

运行结果:

例1.8:添加新类别 

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print(s.cat.categories)

运行结果:

例1.9 :移除分类

使用 Categorical.remove_categories() 方法,可以移除不需要的分类。

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print(s)
print('-'*50)
print(s.cat.remove_categories("a"))

运行结果: 

1.5 分类数据的比较

pandas 中,分类数据(Categorical 类型)支持比较操作,特别是当你使用有序类别(ordered=True)时,能够进行基于顺序的比较,例如 <>== 等。分类数据通常用于具有有限、固定类别的数据,并且在处理时可以提高性能,特别是当类别数据具有某种顺序时。

分类数据比较的基本操作

  1. 无序类别比较(ordered=False: 如果分类数据是无序的,不能进行大小比较,但可以检查是否相等。

  2. 有序类别比较(ordered=True: 如果分类数据是有序的(即 ordered=True),则可以执行基于顺序的比较。

例1.10: 

import pandas as pd

# 创建 Categorical 类型的 dtype,并指定类别和顺序
cat_dtype = pd.CategoricalDtype(categories=[1, 2, 3], ordered=True)

# 创建第一个 Series
cat = pd.Series([1, 2, 3]).astype(cat_dtype)

# 创建第二个 Series
cat1 = pd.Series([2, 2, 2]).astype(cat_dtype)

# 进行比较
print(cat > cat1)

运行结果: 

二、Python Pandas 数据可视化 

2.1 基础绘图:plot

这个功能在Series和DataFrame上只是一个对matplotlib库plot()方法的简单封装。

例1: 

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('1/1/2000',
   periods=10), columns=list('ABCD'))

df.plot()

运行结果:

2.2 条形图

例2:条形图(.bar) 

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
df.plot.bar()

运行结果: 

例3:可堆叠 (stacked=True)

df.plot.bar(stacked=True)

运行结果: 

例4:横向(barh) 

df.plot.barh(stacked=True)

运行结果:

2.3 直方图

可以使用 plot.hist() 方法绘制直方图。我们可以指定条柱的数量。

例5: 直方图(hist )

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.plot.hist(bins=20)

运行结果: 

 

要为每列绘制不同的直方图,请使用以下代码−

例6:(.diff.hist) 

import pandas as pd
import numpy as np

df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.diff().hist(bins=20)

运行结果: 

2.4 箱线图

可调用 Series.box.plot() 和 DataFrame.box.plot() ,或 DataFrame.boxplot() 来可视化每列数值的分布。

例7: 箱线图(box)

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()

运行结果:

2.5 面积图

可以使用 Series.plot.area() 或 DataFrame.plot.area() 方法创建面积图。

例8:面积图(area) 

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

运行结果:

2.6 散点图

可以使用 DataFrame.plot.scatter() 方法来创建散点图。

例9:散点图(scatter) 

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')

运行结果:

2.7 饼图 

例10:饼图(pie)

import pandas as pd
import numpy as np

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)

subplots=True 参数用于在绘制多个图形时将每一列或每一行的图形绘制到不同的子图(subplot)中。这样可以帮助你在同一画布上并排展示多个图形。

此外,饼图必须 subplots=True

运行结果: 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 03章——10大数据类型概述

一、which10 &#xff08;1&#xff09;一图 &#xff08;2&#xff09;提前声明 这里说的数据类型是value的数据类型&#xff0c;key的类型都是字符串 官网&#xff1a;Understand Redis data types | Docs &#xff08;3&#xff09;分别是 1.3.1redis字符串&#xff0…

bps是什么意思

本文来自DeepSeek "bps" 是 "bits per second" 的缩写&#xff0c;表示每秒传输的比特数&#xff0c;用于衡量数据传输速率。1 bps 即每秒传输 1 比特。 常见单位 bps&#xff1a;比特每秒 Kbps&#xff1a;千比特每秒&#xff08;1 Kbps 1,000 bps&am…

撕碎QT面具(1):Tab Widget转到某个Tab页

笔者未系统学过C语法&#xff0c;仅有Java基础&#xff0c;具体写法仿照于大模型以及其它博客。自我感觉&#xff0c;如果会一门对象语言&#xff0c;没必要先刻意学C&#xff0c;因为自己具有对象语言的基础&#xff0c;等需要用什么再学也不迟。毕竟不是专门学C去搞算法。 1…

项目版本号生成

需求 项目想要生成一个更新版本号&#xff0c;格式为v2.0.20250101。 其中v2.0为版本号&#xff0c;更新时进行配置&#xff1b;20250101为更新日期&#xff0c;版本更新时自动生成。 实现思路 创建一个配置文件version.properties&#xff0c;在其中配置版本号&#xff1b…

善筹网设计与实现(代码+数据库+LW)

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自…

使用 MindSpore 训练 DeepSeek-V3 模型

MindeSpore 已经适配 DeepSeek-V3 的训练推理啦&#xff0c;下面是使用 MindSpore 对DeepSeek-V3做训练的过程。 一、环境确认 这里呢我使用的是 8张 910B2 的显卡&#xff1a; 其中 MindSpore Transformers 的环境依赖如下&#xff1a; PythonMindSporeCANN固件与驱动3.1…

DeepSeek R1完全本地部署实战教程01-课程大纲

一、课程体系 二、学习目标: 了解基础知识掌握安装部署学会搭建可视化界面能力水平进阶三、课程特点: 案例驱动工程实战完整体系四、课程大纲 1.DeepSeek R1 项目运行演示 【视频课程】 (1)可视化交互 (2)联网搜索 (3)本地知识库 2.环境安装部署 【视频课程】 (1)软…

redis cluster测试

集群节点信息这时候停掉一个master 172.30.60.31 从集群信息集中我们可以看到172.30.60.31的slave是172.30.60.41&#xff0c;查看41的日志&#xff0c;发现他成为了新的master 这时候我们在将172.30.60.41也杀死&#xff0c;会发现集群异常了 尝试把172.30.60.31启动&#xff…

数据恢复-01-机械硬盘的物理与逻辑结构

磁盘存储原理 磁盘存储数据的原理&#xff1a; 磁盘存储数据的原理是利用磁性材料在磁场作用下的磁化性质&#xff0c;通过在磁盘表面上划分成许多小区域&#xff0c;根据不同的磁化方向来表示0和1的二进制数据&#xff0c;通过读写磁头在磁盘上的移动&#xff0c;可以实现数据…

网络工程师 (35)以太网通道

一、概念与原理 以太网通道&#xff0c;也称为以太端口捆绑、端口聚集或以太链路聚集&#xff0c;是一种将多个物理以太网端口组合成一个逻辑通道的技术。这一技术使得多个端口能够并行工作&#xff0c;共同承担数据传输任务&#xff0c;从而提高了网络的传输能力和可靠性。 二…

USB2.03.0摄像头区分UVC相机在linux中的常用命令

这里是引用 一. USB2.0 & 3.0接口支持区分 1.1. 颜色判断 USB接口的颜色并不是判断版本的可靠标准&#xff0c;但根据行业常见规范分析如下&#xff1a; USB接口颜色与版本对照表&#xff1a; 接口颜色常见版本内部触点数量传输速度黑色USB2.04触点480 Mbps (60 MB/s)白…

【推理llm论文精度】DeepSeek-R1:强化学习驱动LLM推理能力飞跃

最近deepseek R1模型大火&#xff0c;正好复习一下他家的技惊四座的论文https://arxiv.org/pdf/2501.12948 近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;在推理能力上取得了显著进展&#xff0c;但如何进一步有效提升仍然是研究热点。DeepSeek-AI发布了 DeepS…

从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用

文章目录 1. 后端项目搭建 1.1 环境准备1.2 数据表准备1.3 SpringBoot3项目创建1.4 MySql环境整合&#xff0c;使用druid连接池1.5 整合mybatis-plus 1.5.1 引入mybatis-plus1.5.2 配置代码生成器1.5.3 配置分页插件 1.6 整合swagger3&#xff08;knife4j&#xff09; 1.6.1 整…

学习数据结构(9)栈和队列上

1.栈的概念 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作 的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出&#xff08;先进先出&#xff09;的原则 栈的插入操作叫做进栈/压栈/入栈&#xff…

【ESP32】ESP-IDF开发 | WiFi开发 | HTTP服务器

1. 简介 1.1 HTTP HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff0c;全称超文本传输协议&#xff0c;用于从网络服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效&#xff0c;使网络传输减少。它不仅保证计算机正确快速地传输超文本文档…

滚动弹幕案例

滚动弹幕案例 一、需求 1.页面上漂浮字体大小不一、颜色不一&#xff0c;从左向右滚动的弹幕&#xff1b; 2.底部中间有一个发送功能&#xff0c;可以发送新的弹幕&#xff1b; 3.底部的发送部分可以向下收起和弹出。 二、html <div class"container"><…

腿足机器人之五- 粒子滤波

腿足机器人之五粒子滤波 直方图滤波粒子滤波 上一篇博客使用的是高斯分布结合贝叶斯准则来估计机器人状态&#xff0c;本篇是基于直方图和粒子滤波器这两种无参滤波器估计机器人状态。 直方图方法将状态空间分解成有限多个区域&#xff0c;并用直方图表示后验概率。直方图为每个…

AI 编程工具—Cursor 进阶篇 数据分析

AI 编程工具—Cursor 进阶篇 数据分析 上一节课我们使用Cursor 生成了北京房产的销售数据,这一节我们使用Cursor对这些数据进行分析,也是我们尝试使用Cursor 去帮我们做数据分析,从而进一步发挥Cursor的能力,来帮助我们完成更多的事情 案例一 房产销售数据分析 @北京202…

搭建Deepseek推理服务

概述&#xff1a; 本文介绍用Open webui ollama搭建一套Deepseek推理服务&#xff0c;可以在web页面上直接进行对话。作为体验搭建的是Deepseek 7b参数版本 首先选择一个云厂商创建一台ubuntu系统的虚拟机&#xff0c;带公网IP&#xff0c;通过shell登录虚拟机完成以下操作&…

STM32的HAL库开发---ADC

一、ADC简介 1、ADC&#xff0c;全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 把一些传感器的物理量转换成电压&#xff0c;使用ADC采集电压&#xff0c;然后转换成数字量&#xff0c;经过单片机处理&#xff0c;进行控制和显示。 2、常见的AD…