pandasa——数据连接和可视化

news2024/11/28 17:47:40

1 数据连接 concat merge join 

  • append 竖直方向追加, 在最新的pandas版本中已经被删除掉了, 这里推荐使用concat

1.1 pd.concat

两张表, 通过行名、列名对齐进行连接

import pandas as pd
df1 = pd.DataFrame([[1, 2, 3], [1, 10, 20], [5, 6, 7], [3, 9, 0], [8, 0, 3]], columns=['x1', 'x2', 'x3'])
df2 = pd.DataFrame([[1, 2], [1, 10], [1, 3], [4, 6], [3, 9]], columns=['x1', 'x4'])
pd.concat([df1, df2], axis=1)
pd.concat([df1, df2],join='inner')

axis=1 默认是0 , 上下连接, 用列名做对齐 = 1 左右连接 用行名对齐

join = 'inner' 默认 ‘outer’ outer 会保留连接的两张表的所有的信息, 有列名、行名不匹配的时候, 用NaN填充, 如果是inner 只会连接 行名、列名相同的部分

1.2 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 右表用于关联的字段名

suffixes 后缀, 当关联结果中,出现了同名的字段, 用于区分哪个字段来自于哪一张表, 默认是(' _ x', '_ y')

1.3 join合并

df1.join(df2,lsuffix='left',rsuffix='right')

如果这里不写on 这个参数, 和pd.concat axis=1 的时候完全相同

df1.join(df2,on='x1',lsuffix='left',rsuffix='right')

df1 用x1 和 df2的index 做join 左表的一列数据和右表的行索引 进行合并

join功能可以用concat 和 merge 替代。 这部分作为了解就可以了

2 转置和透视表

df.T 行变列, 列变行

2.1 透视表

  • 计算的结果可以通过分组聚合来实现, 只不过是展示的方式跟分组聚合有差异

  • 统计每个城市线下门店各种品类商品总销售额

uniqlo_df_offline = uniqlo_df[uniqlo_df['销售渠道']=='线下'] # 筛选出线下的销售数据
result_df = uniqlo_df_offline.groupby(['城市','产品名称'])['销售金额'].sum()
# 通过分组聚合统计不同城市不同产品的总销售额
  • 通过透视表实现

uniqlo_df_offline.pivot_table(index='城市',columns='产品名称',values='销售金额',aggfunc='sum')

index 分组字段之一, 在结果中作为行索引

columns 分组字段之一, 在透视表结果中作为列名

values 聚合字段, 在透视表的结果中展示在值的位置上

aggfunc 聚合函数, 对聚合字段使用的统计函数名字

需要注意的是, index columns values 都可以传列表, aggfunc 可以针对不同的value 选择不同的聚合方式, 此时需要传入字典 但是不推荐把表做的过于复杂

df.groupby()[].mean()

df['列名'].value_counts()

df['列名'].unique()

df.sort_values()

df.drop()

df.drop_duplicates()

pd.cut()

pd.to_datetime() 转日期时间类型

  • s[日期].dt.year weekday

df.merge()

pd.concat()

df.head()

df.info()

df.describe()

df[''].apply()

df.loc /df.iloc

max() min() mean() count() sum() std() quantile() df.corr()

根据条件筛选数据

分组聚合

pd.cut()

3 Matplotlib数据可视化

数据可视化的库一共有两类

基于Matplotlib的, 绘制的是静态的图形

  • pandas

  • seaborn

用javascript 实现的 比如 echarts → pyecharts plotly

  • 随着使用的时候再去讲

对大家的要求

  • 知道什么场景选择什么样的图表

  • 代码能够看懂, 基于已有的代码可以修改实现自己想要的效果

3.1 Matplotlib 的绘图套路

import pandas as pd
import matplotlib.pyplot as plt

x = [-3, 5, 7] #准备数据的x轴坐标
y = [10, 2, 5] #准备数据的y轴坐标
# 面向过程的API 通过plt 绘图工具, 调用方法, 画图
plt.figure(figsize=(15,3)) # 创建绘图区域  figsize指定区域大小  15 宽度 3高度
plt.plot(x, y)
plt.xlim(-8,8)
plt.xlabel('X Axis',size=15)   # 设置X轴的标题
plt.ylabel('Y Axis',size=10)  # 设置Y轴标题
plt.title('Line plot',size=15) # 添加 图大标题
plt.grid(True) # 网格线
plt.show()
# 面向对象的API  先获取坐标轴的对象, 通过坐标轴对象调用方法 设置属性
fig,ax = plt.subplots(figsize=(15,3)) # 返回fig ax(坐标轴)
ax.plot(x,y)
ax.set_xlim(-3,8)
ax.set_ylim(-3,8)
ax.set_xlabel('X Axis',size=15)
ax.set_ylabel('Y Axis',size=10)
ax.set_title('Line plot',size=15)
plt.show()

基本套路

import matplotlib.pyplot as plt

plt.figure(figsize=(15,3))

plt.plot(x, y)

plt.show()

3.2 单变量可视化——绘制直方图

这里使用seaborn提供的餐馆小费数据

tips = pd.read_csv('C:/Develop/顺义48/day01/02_代码/data/tips.csv')

对餐馆消费账单的分布情况进行可视化

# 单变量的分布 可以绘制直方图
plt.figure(figsize=(16,8))
plt.hist(tips['total_bill'],bins=8)
# 直方图使用场景, 单独的取值是连续值(数值型) 变量,看这个变量的分布情况就可以选择直方图
# 绘制的过程, 把数据从小到大排序, bins 数量决定了数据要分成几组, 分组的方式等距分组(每组的上下边界的差值尽可能一样)
# 统计落在每一组的数据的条目数, 通过一个柱状图绘制出来,一个柱子代表一组, 柱子的高度取决于这一组有多少条数据

3.3 双变量可视化 ——散点图

plt.figure(figsize=(8,6))
plt.scatter(tips['total_bill'],tips['tip'])
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.show()

散点图的使用场景

# 散点图使用场景 两个连续型变量 发现他们之间是否存在关联( 一个变量是否随着另一个变量的变化而变化) 
# scatter 一个变量作为x轴坐标, 另一个变量做为y轴坐标

4 pandas 数据可视化

pandas 集成了Matplotlib, 画图功能就是对Matplotlib的封装

画图API

df1.plot()  # 默认折线图
df1['x'].plot.bar()

# df.plot.line() # 折线图的全写方式
# df.plot.bar() # 柱状图
# df.plot.barh() # 横向柱状图 (条形图)
# df.plot.hist() # 直方图
# df.plot.box() # 箱形图
# df.plot.kde() # 核密度估计图
# df.plot.density() # 同 df.plot.kde()
# df.plot.area() # 面积图
# s.plot.pie() # 饼图
# df.plot.scatter() # 散点图
# df.plot.hexbin() # 六边形箱体图,或简称六边形图
plt.show()

柱状图

  • 多个类别, 取值不同在一起比大小

  • 举例使用小费数据, 统计周四周五周六周日, 平均账单金额

# 对day 进行分组, 对账单总金额求平均, 结果会返回Series 这里直接使用了Series的绘图API
tips.groupby('day')['total_bill'].mean().plot(kind='bar')

Series 调用plot方法, index 会作为x轴坐标 值values 会作为y轴坐标

饼图

  • 整体部分的关系, 所有的部分加到一起一定组成一个整体

tips.groupby('day')['total_bill'].sum().plot(kind='pie',autopct='%.2f%%')

假设这个餐馆每周只有周四到周日营业, 统计一下数据集中这段时间内, 周四~周日, 哪一天销售额占比更高

箱线图

蜂巢图 作为了解

  • 作用和散点图类似, 当数据量比较大的时候, 绘制散点图, 好多点会重复绘制到相同的位置, 普通的散点图不能读出这个信息来

movie_df = pd.read_csv('C:/Develop/顺义48/day01/02_代码/data/movie.csv')
# 加载电影数据, 查看收入gross 和 imdb_score 之间是否有关
# 绘制散点图,有些点覆盖到一起了
movie_df.plot.scatter(x='gross',y='imdb_score',figsize=(18,10))

绘制蜂巢图

movie_df.plot.hexbin(x='gross',y='imdb_score',figsize=(18,10),gridsize=20)
# 下图中, 颜色深的部分数据量比较大

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

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

相关文章

IOC (一)

》》新建一个CORE 控制台程序 注册服务 》》 安装 Microsoft.Extensions.DependencyInjection using Microsoft.Extensions.DependencyInjection;namespace ConsoleApp1 {internal class Program{static void Main(string[] args){Method();Console.ReadKey();}static void…

[Java基本语法] 逻辑控制与方法

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀线程与…

Keysight 是德 N9343C 手持式频谱分析仪

Keysight 是德 N9343C 手持式频谱分析仪 主要特性与技术指标 功能 • 1 MHz ~ 13.6 GHz(可调谐至 9 kHz) • 内部前置放大器高达 13.6 GHz • 内置 GPS 接收机和 GPS 天线 • 内置跟踪发生器 性能 • -144 dBm 典型的显示平均噪声电平&a…

IT入门知识博客文章大纲第一部分《IT基础知识》(1/10)

目录 IT入门知识博客文章大纲第一部分《IT基础知识》(1/10) 1.引言 2.第一部分:IT基础知识 2.1 计算机硬件 CPU:计算机的心脏 内存:数据的临时居所 存储设备:数据的长期仓库 输入输出设备&#xff1…

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店评论情感分析 酒店价格预测系统 酒店可视化 酒店爬虫 neo4j知识图谱 深度学习

酒店评论爬虫模块主要为如下酒店推荐系统提供酒店、房间、评论采集与情感分析,牛逼系统如下: 创新点10个全程吊打摩擦导师:neo4j知识图谱、预测算法、推荐算法(4种机器学习 深度学习 如协同过滤基于用户、基于物品、神经网络混合CF推荐算法ML…

将ZED获取的视频格式svo转换成其他格式

引言 svo视频格式是ZED的专属格式,实际应用中我们需要将该格式转化成其他可读的文件格式。 1 安装ZED-SDK 双击打开ZED的视频转化执行文件 "C:\Program Files (x86)\ZED SDK\samples\bin\ZED_SVO_Export.exe" 打开如下所示: 根据上述指示执行转换命令,官网也有…

STM32MP135裸机编程:配置RCC,修改主频到1GHz

0 工具准备 STM32CubeMX v6.11.1 STM32CubeIDE v1.15 STM32CubeProgrammer v2.16.0 STM32MP13xx参考手册 STM32MP13勘误手册 STM32MP135AD数据手册 正点原子stm32MP135开发板 1 确认时钟源 本例使用的时钟源均由外部晶振提供,分别是24MHz的HSE、32.768KHz的LSE。原…

数据库第一次实验报告

1. 使用 SQL 语句创建数据库 studentsdb。 2. 使用 SQL 语句选择 studentsdb 为当前使用数据库。 3. 使用 SQL 语句在 studentsdb 数据库创建数据表 student_info、curriculum、grade 4. 使用 SQL 语句 INSERT 向 studentsdb 数据库的 student_info、curriculum、grade 表插…

如何定位检查不到的元素

光标离开输入框时,输入框立刻消失,导致无法查看该元素的html标签属性,如何定位这种元素呢?有两种方法,一种是通过事件监听器,另一种是通过网络接口抓包 1、首先定位到搜索按钮 这个搜索的按钮,当…

统计信号处理基础 习题解答10-14

题目: 观测到数据 其中是已知的,是方差为的WGN,且和独立,求的MMSE估计量以及最小贝叶斯MSE。 解答: 观测到的数据写成矢量形式: 其中: 根据题目条件,符合定理10.3,因此…

oracle安装,导出、导入domp文件、解开oracle行级锁

下载地址: https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html 然后解压,请记住你的解压地址,也就是软件安装地址, 后面还会有一个数据库存储位置,导出的domp文件就是在这里。 然后按照…

基于iBeacon蓝牙定位技术的反向寻车系统

随着城市化进程的加速和汽车保有量的不断增加,大型停车场成为了人们日常生活中不可或缺的一部分。然而,在繁忙的停车场中快速找到自己的车辆,成为了许多车主的难题。为了解决这一问题,维小帮基于iBeacon蓝牙技术打造的反向寻车系统…

Mi-gpt:将小爱音箱接入 ChatGPT ,智能家居 Agent,播放音乐,调节灯光,逗你开心

✨点击这里✨:🚀原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) Mi-gpt:将小爱音箱接入 ChatGPT ,智能家居 Agent,播放音乐&…

Hvv--知攻善防应急响应靶机--Linux2

HW–应急响应靶机–Linux2 所有靶机均来自 知攻善防实验室 靶机整理: 夸克网盘:https://pan.quark.cn/s/4b6dffd0c51a#/list/share百度云盘:https://pan.baidu.com/s/1NnrS5asrS1Pw6LUbexewuA?pwdtxmy 官方WP:https://mp.weixin.…

Perl 语言学习进阶

一、如何深入 要深入学习Perl语言的库和框架,可以按照以下步骤进行: 了解Perl的核心模块:Perl有许多核心模块,它们提供了许多常用的功能。了解这些模块的功能和用法是深入学习Perl的第一步。一些常用的核心模块包括:S…

Linux--MQTT(一)简介

一、简介 MQTT ( Message Queuing Telemetry Transport,消息队列遥测传输), 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。 与 HTTP 协议一样, MQTT 协议也是应用层协议,工作在 TCP/IP 四…

在Pycharm使用Github Copilot

文章目录 1.GitHub Copilot 是什么2.注册GitHub Copilot3.官方使用文档4.安装 GitHub Copilot插件5.在Pycharm中使用6.相关功能键7.启用或禁用 GitHub Copilot 1.GitHub Copilot 是什么 GitHub Copilot 是一款 AI 编码助手,可帮助你更快、更省力地编写代码&#xff…

Linux/Windows 安装 RocketMQ 详细图文教程!

Linux 安装 RocketMQ 首先,你需要从RocketMQ的官方网站或GitHub仓库下载最新的RocketMQ发行版下载安装,官网下载地址:https://rocketmq.apache.org/download/。 接下来配置环境变量: 输入vim /etc/profile命令配置环境变量输入i进…

高速公路智能管理系统:构建安全畅通的数字大动脉

随着城市化进程的加速和交通需求的增长,高速公路系统作为城市交通的重要组成部分,正承担着越来越多的交通运输任务。为了提升高速公路的安全性、便捷性和智能化管理水平,高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

PromptMRG: Diagnosis-Driven Prompts for Medical Report Generation

文章汇总 存在的问题 罕见疾病在训练数据中的代表性不足,使其诊断性能不可靠。 解决办法 1:利用预训练的CLIP模型从数据库中检索相似的报告来辅助查询图像的诊断。 2:设计SDL模块根据不同疾病的学习状态自适应调整优化目标。 流程解读 文…