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调用 狭义:不采…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...