Pandas04
Pandas01
Pandas02
Pandas03
文章目录
- 内容回顾
- 1 数据的合并和变形
- 1.1 df.append (了解)
- 1.2 pd.concat
- 1.3 merge 连接 类似于SQL的join
- 1.4 join (了解)
- 2 变形
- 2.1 转置
- 2.2 透视表
- 3 MatPlotLib数据可视化
- 3.1 MatPlotLib API 套路 &为什么要可视化
- 3.2 单变量可视化
- 3.3 双变量可视化 散点图
- 4 pandas绘图
- 4.1 pandas绘图的API说明
- 4.2 Pandas 绘图 柱状图
- 4.3 饼图
- 4.4 散点图和气泡图
- 4.5 箱线图
- 4.6 蜂巢图
内容回顾
计算函数 排序/相关
- corr()
- sort_values() 多字段排序 ascending = []
缺失值处理
- NaN
- df.isnull().sum()
- pd.read_XXX(keep_default_na, na_values = )
- df.fillna(method = ffill /bfill) df.interpolate
- df.dropna(subset =[])
数据类型
- datetime
- 日期时间列, 整列数据获取时间相关的属性, s.dt.
- datetime64
- timedelta64
- 时间点
- TimeStamp
- 日期时间索引
- DatetimeIndex
- TimedeltaIndex
- 利用日期时间索引进行切片之前一定先排序
- 日期时间列, 整列数据获取时间相关的属性, s.dt.
- category
- pd.cut()可以得到一个category类型, 和字符串之间的差异, 会指定顺序, 排序的时候会按照顺序排序
分组分箱
-
分组
- df.groupby(‘分组字段’)[‘聚合字段’].聚合函数()
- df.groupby(‘分组字段’).agg({})
-
分箱
- pd.cut()
1 数据的合并和变形
1.1 df.append (了解)
在2.0的版本 已经被删除了
df1.append(df2)
# df1后面追加一些新的行, df1和df2的数据,
# 如果列名相同就能够追加到一起, 如果列名不同, 拼接不上的部分用NaN填充
1.2 pd.concat
多张表, 通过行名/列名字 作为拼接的条件
pd.concat([df1,df2,…], axis = , join=‘’)
- axis 控制按行拼接 还是按列拼接
- axis = 0 使用列名(coloumns)对齐, 列名相同的拼到一起, 竖向拼接
- axis = 1 使用行名(index)对齐, 行名相同的拼到一起, 横向拼接
- join
- 默认 outer 所有的数据都会保留, 拼接不起来的部分缺少的数据用NaN填充
- 可选 inner 只会保留能拼接起来的部分, 行名/列名不同的删除
pd.concat([df1, df2], axis=1,ignore_index = True)
ignore_index 拼接之后忽略之前的索引重新给从0开始的索引
1.3 merge 连接 类似于SQL的join
# 写法1
df1.merge(df2, on='列名', how='固定值')
# 写法2
pd.merge(df1, df2, on='列名', how='固定值')
-
merge函数有2种常用参数,参数说明如下
- 参数
on='列名',表示基于哪一列的列值进行合并操作 - 参数
how='固定值',表示合并后如何处理行索引,固定参数具体如下:how='left'对应SQL中的left join,保留左侧表df1中的所有数据how='right'对应SQL中的right join,保留右侧表df2中的所有数据how='inner'对应SQL中的inner,只保留左右两侧df1和df2都有的数据how='outer'对应SQL中的join,保留左右两侧侧表df1和df2中的所有数据
- 参数
-
merge横向连接多个关联数据集具体使用
df3 = pd.merge(df1, df2, how='left', on='x1') df4 = pd.merge(df1, df2, how='right', on='x1') df5 = pd.merge(df1, df2, how='inner', on='x1') df6 = pd.merge(df1, df2, how='outer', on='x1')
df1.merge(df2, left_on='x1', right_on='x4', how='inner',suffixes=('_left', '_right'))
如果要关联的两张表使用的列名不一样, 通过left_on 和 right_on 来指定
left_on 左表出哪一列用于关联
right_on 右表出哪一列用于关联suffixes 后缀, 当关联结果中,出现了同名的字段, 用于区分哪个字段来自于哪一张表, 默认是(’ _ x’, ‘_ y’)
1.4 join (了解)
默认写法
df1.join(df3,rsuffix='_right',lsuffix='_left',how='outer')
横向左右拼接, 使用df1 和 df3的index 进行对齐
作用和 pd.concat([df1,df3],axis = 1) 完全相同 可以通过pd.concat进行替换
还可以传一个参数on
df1.join(df2,on='x1' ,rsuffix='_right',lsuffix='_left')
df1 x1这一列, 和df2的索引(index) 进行对齐
rsuffix 关联结果中 右表后缀 lsuffix 左表的后缀
当关联结果中,出现了同名的字段, 用于区分哪个字段来自于哪一张表
这种关联方式, 可以通过把df2的索引变成一列(reset_index) 再走merge来实现
2 变形
2.1 转置
df.T
2.2 透视表
每个城市线下门店各种品类商品总销售额
uniqlo_df = pd.read_csv('C:/Develop/深圳42/data/uniqlo.csv')
# 每个城市线下门店各种品类商品总销售额
uniqlo_df_offline = uniqlo_df[uniqlo_df['销售渠道']=='线下']
# 分组聚合的写法
uniqlo_df_offline.groupby(['城市','产品名称'])['销售金额'].sum().reset_index()
# 数据透视表
uniqlo_df_offline.pivot_table(index='城市',columns='产品名称',values='销售金额',aggfunc='sum')
透视表和分组聚合作用是一样的, 只不过展示的形式有差异
index columns 指定是是分组字段
- index 在结果中以行索引形式展示的字段名称
- columns 在结果中以列名的形式展示的字段名称
values 指定的是聚合字段
aggfunc 指定的是聚合方法

index columns values aggfunc 都可以传入列表
- 不建议传入太多的字段, 结果过于复杂不方便处理结果
3 MatPlotLib数据可视化
3.1 MatPlotLib API 套路 &为什么要可视化
x = [-3, 5, 7] #准备数据的x轴坐标
y = [10, 2, 5] #准备数据的y轴坐标
# 创建绘图区域
plt.figure(figsize=(10,6))
# 画图
plt.plot(x,y)
# 对图形的美化, 坐标轴, 标题 ..
plt.xlabel('x_axis', size=18)
plt.ylabel('y_axis',size=12)
plt.title('line plot')
# 显示
plt.show()
面向对象的API 效果跟上面是一样的
x = [-3, 5, 7] #准备数据的x轴坐标
y = [10, 2, 5] #准备数据的y轴坐标
# 创建绘图区域
fig,ax = plt.subplots(figsize=(10,6))
# 画图
ax.plot(x,y)
ax.set_xlabel('x_axis', size=18)
ax.set_ylabel('y_axis',size=12)
ax.set_title('line plot')
# 显示
plt.show()
通过图片理解数据中的规律效率更高
使用合适的图表, 更容易发现数据中的规律
什么时候画图
- 报告, 文档, 图更容易用来支持观点
- 在理解不熟悉的业务时, 通过画图可以快速的发现一些规律
数据可视化优势举例 anscombe数据集
anscombe = pd.read_csv('C:/Develop/深圳42/data/anscombe.csv')
anscombe 一共四份, 通过describe()方法, 发现经常查看的几个统计量, 大小差不多, 似乎数据的分布是差不多的
dataset_1 = anscombe[anscombe['dataset']=='I']
dataset_2 = anscombe[anscombe['dataset']=='II']
dataset_3 = anscombe[anscombe['dataset']=='III']
dataset_4 = anscombe[anscombe['dataset']=='IV']
画图发现规律
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示问题
fig = plt.figure(figsize=(16,8))
axes1 = fig.add_subplot(221) # 2行 2列 第一个框
axes2 = fig.add_subplot(222) # 2行 2列 第二个框
axes3 = fig.add_subplot(223)
axes4 = fig.add_subplot(224)
axes1.plot(dataset_1['x'],dataset_1['y'],'o') # plot 绘制折线图, 'o' 点不连起来
axes2.plot(dataset_2['x'],dataset_2['y'],'o')
axes3.plot(dataset_3['x'],dataset_3['y'],'o')
axes4.plot(dataset_4['x'],dataset_4['y'],'o')
fig.suptitle('可视化必要性')
plt.show()

3.2 单变量可视化
变量是连续型的, 单变量看分布,需要绘制直方图 hist
plt.figure(figsize=(10,6))
plt.hist(tips_df['total_bill'],bins=10)
bins 把tips_df[‘total_bill’]数据分成了10组 下面就是分组的边界
array([ 3.07 , 7.844, 12.618, 17.392, 22.166, 26.94 , 31.714, 36.488,41.262, 46.036, 50.81 ])
统计每一组中数据的条目数:
array([ 7., 42., 68., 51., 31., 19., 12., 7., 3., 4.]),
每个柱子的高度就是每组数据条目的数量
通过直方图可以了解到在不同组中哪一组数据多哪一组数据少, 就是数据的分布情况\

3.3 双变量可视化 散点图
变量是连续型的, 两个连续型的变量, 想看他们之间的关系, 需要绘制散点图 scatter
plt.figure(figsize=(10,8))
plt.scatter(tips_df['total_bill'],tips_df['tip'])
plt.title('账单和小费关系图')
plt.show()

从图中可以发现, 随着账单金额的增加, 小费呈增加的趋势
可以通过计算相关系数进行验证
tips_df.corr()

4 pandas绘图
4.1 pandas绘图的API说明
pandas的绘图功能实际上调用了MatPlotLib
df[‘列名’].plot.XXX() df[‘列名’].plot(kind=‘XXX’)
df.plot.XXX() df.plot(kind=‘XXX’)
-
XXX 图形的种类 line折线 hist 直方 scatter 散点 bar 柱状图 pie饼图
-
画图的时候, 默认是使用index作为X轴的坐标, 也可以指定, x,y
city_df = pd.read_csv('C:/Develop/深圳42/data/city_day.csv')
# 获取数据前30条
temp_df = city_df.head(30)
# 日期作为index 用日期作为X轴的数据
temp_df.set_index('Date',inplace=True)
# 对SO2 绘制折线图, 看SO2 随时间的波动
temp_df['SO2'].plot(figsize=(20,10),grid=True)

import matplotlib.pyplot as plt
# 筛选两列数据, 这两列数据都会被画到图里
temp_df[['SO2','O3']].plot(kind='line',figsize=(20,10),grid=True)
plt.show()

折线图的使用场景
- 某个变量随时间的波动情况
4.2 Pandas 绘图 柱状图
不同的类别在一起进行比较
tips_df.groupby('sex')['tip'].mean().plot.bar()
对比男性女性 给小费的水平 (性别分组对小费求平均)

tips_df.groupby('day')['total_bill'].mean().plot.bar()
统计消费者在周几更愿意花钱 (每周不同日期的平均消费情况)

tips_df.pivot_table(index='day',columns='sex',values='total_bill',aggfunc='mean').plot.bar()
对比男性女性在每周中不同天, 花钱的情况

从上面的例子中可以看出, pandas绘制柱状图
- 索引(index)决定了有几组柱子
- column 数量决定了每组柱子里有几个不同的柱子(进行比较)
- 值决定了柱子的高度
tips_df.pivot_table(index='day',columns='sex',values='total_bill',aggfunc='mean')

柱状图的其它画法 barh 横向柱状图 stacked = True 堆叠柱状图(每组柱子不同类别会堆在一起)
tips_df.pivot_table(index='time',columns='sex',values='total_bill',aggfunc='count').plot.barh(stacked=True)

4.3 饼图
整体和部分之间的占比关系
tips_df.groupby(['day'])['total_bill'].sum().plot.pie(autopct='%1.2f%%',figsize=(20,10))
# 假设 消费数据就是一家餐馆一周的营业数据, 统计每天的销售额占比情况,这个时候就可以绘制饼图
# 每天的销售额加到一起构成了这一周总销售额
autopct=‘%1.2f%%’ 加上这个参数会在饼的每一部分加上百分比的数字

4.4 散点图和气泡图
散点图添加一个参数 s 控制点的半径大小, 这样就可以多表示一个维度的数据, 加上了这个参数的散点图也可以叫做气泡图
tips_df.plot.scatter(x='total_bill',y='tip',figsize=(10,8),s=tips_df['size']*30)
plt.show()
这里使用用参数人数 * 30 作为气泡的半径大小
4.5 箱线图

4.6 蜂巢图
作用类似于散点图, 可以看两个连续性变量的关系, 通过蜂巢图可以表示出数据的分布情况, 颜色较深的区域分布的数据量比较大, 颜色浅的区域分布的数据量比较小
movie_df = pd.read_csv('C:/Develop/深圳42/data/movie.csv')
# 加载电影数据
movie_df.plot.scatter(x='gross',y='imdb_score',figsize=(10,8))
# 绘图查看评分和收入之间是否有关系

在6~8分, 收入在1一个亿一下, 的区域, 分布了很多数据, 只通过散点图, 无法反应数据量的分布情况, 此时可以再绘制一个蜂巢图
movie_df.plot.hexbin(x='gross',y='imdb_score',figsize=(10,8),gridsize=15)

从上图中, 看出, 颜色比较深的部分数据量比较大, 主要集中在 6到7分, 收入在6千万以下
df.plot.XXX()
- line 折线 (多列 多条线)
- hist 直方 (一列)
- scatter 散点图 (x,y)
- bar 柱状图 (多列, 多个柱子)
- pie 饼图 (一列)
- boxplot 箱型图 箱线图 (相对也会少一些)
- hexbin 蜂巢图 (了解)
若有错误与不足请指出,关注DPT一起进步吧!!!
相关文章:
Pandas04
Pandas01 Pandas02 Pandas03 文章目录 内容回顾1 数据的合并和变形1.1 df.append (了解)1.2 pd.concat1.3 merge 连接 类似于SQL的join1.4 join (了解) 2 变形2.1 转置2.2 透视表 3 MatPlotLib数据可视化3.1 MatPlotLib API 套路 &为什么要可视化3.2 单变量可视化3.3 双变量…...
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序(升级版)
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序升级版 调整的功能 上一个小程序只是能计算当年的农历节日的间隔时间,那么这次修改一下,任意年份的农历节日都可以,并且能输出农历节日对应的阳历日期࿰…...
c语言中void关键字的含义和用法
在 C 语言中,void 是一个特殊的关键字,主要有以下几个用途: 1. 表示函数没有返回值 当一个函数不需要返回任何值时,可以将其返回类型声明为 void。 #include <stdio.h>void printMessage() {printf("Hello, World!\…...
安卓音频之dumpsys audio
目录 概述 详述 dumpsys audio 1、音频服务生命周期的事件日志 2、音频焦点事件日志 3、音频流音量信息 4、音量组和设备的相关信息 5、铃声模式 6、音频路由 7、其他状态信息 8、播放活动监控信息 9、录音活动记录 10、AudioDeviceBroker 的记录 11、音效&#…...
玩客云v1.0 刷机时无法识别USB
v1.0刷机时公对公插头掉了,刷机失败,再次刷机,一直提示无法识别的USB设备,此时LED一直不亮,就像是刷成砖了一样,查了好多文章最后发现正面还有一个地方需要短接。 背面的短接点 【免费】玩客云刷机包s805-…...
影刀进阶指令 | Kimi (对标ChatGPT)
文章目录 影刀进阶指令 | Kimi (对标ChatGPT)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 确定问题2\. 填写问题并发送3\. 检测答案是否出完 四. 运维 影刀进阶指令 | Kimi (对标ChatGPT) 简单讲讲RPA调用kimi实现…...
前端项目 node_modules依赖报错解决记录
1.首先尝试解决思路 npm报错就切换yarn , yarn报错就先切换npm删除 node_modules 跟 package-lock.json文件重新下载依 2. 报错信息: Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…...
数据科学团队管理
定位: 有核心竞争力的工业算法部门与PM、RD等深度合作 业务方向:(不同产品线) 工业预测性维护与数据挖掘视觉检测、OCR 工作内容 项目需求与交付内部框架(frameworks \packages)应用demo专利、竞赛、论文 日常管理 项目管理数据管理(原…...
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
机器学习实战通常是将理论与实践结合,通过实际的项目或案例,帮助你理解并应用各种机器学习算法。下面是一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的…...
攻防世界web第二题unseping
这是题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("ping"))) {cal…...
动手学深度学习-深度学习计算-3延后初始化
目录 实例化网络 小结 到目前为止,我们忽略了建立网络时需要做的以下这些事情: 我们定义了网络架构,但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时,甚至没有足够的信息来确定模型应该包含…...
Linux | 零基础Ubuntu搭建JDK
目录 软件简介 在线文档 压缩包安装 下载地址 补:传输软件 传输等待 目录结构 解压安装 配置环境 更新环境 测试JDK结果 APT安装 软件简介 Java Development Kit (JDK) 是 Sun 公司(已被 Oracle 收购)针对 Java 开发员的软件开发工具包。自…...
Android `android.graphics` 包深度解析:架构与设计模式
Android android.graphics 包深度解析:架构与设计模式 目录 引言android.graphics 包概述核心类与架构 CanvasPaintBitmapColorPathShaderMatrix设计模式在 android.graphics 中的应用 工厂模式装饰者模式策略模式享元模式高级图形处理技术 硬件加速离屏渲染自定义 View 中的…...
WPF使用OpenCvSharp4
WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中,右键单击项目名称,选择“管理 NuGet 包”。搜索并安装以下包: OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…...
你不需要对其他成年人的情绪负责
在这个纷繁复杂的世界里,每个人都是独一无二的个体,背负着各自的故事、梦想与烦恼。在人际交往的广阔舞台上,我们时常会遇到这样的情境:朋友、同事、家人,甚至是陌生人,他们的情绪似乎总能不经意间影响到我…...
25秋招面试总结
秋招从八月底开始,陆陆续续面试了不少,现在也是已经尘埃落定,在这里做一些总结一些我个人的面试经历 腾讯 腾讯是我最早面试的一家,一开始捞我面试的是数字人民币,安全方向的岗位,属于腾讯金融科技这块。…...
高斯核函数(深入浅出)
目录 定义及数学形式主要特点应用示例小结 高斯核函数(Gaussian Kernel),又称径向基核(Radial Basis Function Kernel,RBF Kernel),是机器学习与模式识别中最常用的核函数之一。它通过在高维空间…...
支付宝百宝箱 工具,快速上手制作一个agent
作品:历史上的今天-作文素材积累 Datawhale 动手学AI Agent 关键词:AI助手开发、LangGPT框架 链接:百宝箱百宝箱平台是一款可以提供一站式 AI 原生应用的开发平台,您无需具有任何代码基础,只需通过自然语言即可三步完…...
六十:HTTP/2与gRPC框架
随着互联网技术的发展,应用程序之间的通信需求日益复杂和多样化。传统的HTTP/1.x协议虽然广泛应用,但在性能和功能方面已经难以满足现代应用的需求。为了解决这些问题,HTTP/2协议和基于其之上的gRPC框架应运而生。本文将介绍HTTP/2协议的特点…...
1.RPC基本原理
文章目录 RPC1.定义2.概念3.优缺点4.RPC结构5.RPC消息协议5.1 消息边界5.2 内容5.3 压缩 6.RPC的实现6.1 divide_protocol.py6.2 server.py6.3 client.py RPC 1.定义 远程过程调用(remote procedure call) 2.概念 广义:所有通过网络进行通讯,的调用统称为RPC调用 狭义:不采…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

