【数据分析入门】Numpy进阶

目录

  • 一、数据重塑
    • 1.1 透视
    • 1.2 透视表
    • 1.3 堆栈/反堆栈
    • 1.3 融合
  • 二、迭代
  • 三、高级索引
    • 3.1 基础选择
    • 3.2 通过isin选择
    • 3.3 通过Where选择
    • 3.4 通过Query选择
    • 3.5 设置/取消索引
    • 3.6 重置索引
      • 3.6.1 前向填充
      • 3.6.2 后向填充
    • 3.7 多重索引
  • 四、重复数据
  • 五、数据分组
    • 5.1 聚合
    • 5.2 转换
  • 六、缺失值
  • 七、合并数据
    • 7.1 合并-Merge
    • 7.2 连接-Join
    • 7.3 拼接-Concatenate
      • 7.3.1 纵向拼接
      • 7.3.2 横向/纵向拼接
  • 八、日期
  • 九、可视化


pandas 是一个功能强大的 Python 数据分析库,为数据处理和分析提供了高效且灵活的工具。它是在 NumPy 的基础上构建的,为处理结构化数据(如表格数据)时间序列数据提供了丰富的数据结构和数据操作方法

pandas 提供了两种主要的数据结构:SeriesDataFrameSeries一维标记型数组,类似于带标签的列表,可以存储不同类型的数据DataFrame二维的表格型数据结构,类似于关系型数据库中的表格,它由多个 Series 组成,每个 Series 都有一个共同的索引。这使得 pandas 在处理和分析数据时非常方便和高效。

使用 pandas,我们就可以轻松地进行数据导入数据清洗数据转换数据筛选数据分析等操作。它提供了丰富的函数和方法,如索引切片聚合合并排序统计绘图等,使得数据分析变得简单而直观。

一、数据重塑

1.1 透视

  假设我们有一个 DataFrame df2,其中包含了 'Date’、‘Type’ 和 ‘Value’ 这三列数据。想要将 ‘Type’ 列的唯一值作为新 DataFrame 的列,‘Date’ 列作为新 DataFrame 的索引,并将 ‘Value’ 列中对应的值填充到新 DataFrame 的相应位置上
  即 将行变为列 ,我们可以这么实现代码:

>>> df3= df2.pivot(index='Date',columns='Type', values='Value')

在这里插入图片描述
  下面来对pivot() 函数的参数做一下说明:
  index:指定作为新 DataFrame 索引的列名,这里是 ‘Date’ 列。
  columns:指定作为新 DataFrame 列的列名,这里是 ‘Type’ 列的唯一值。
  values:指定填充到新 DataFrame 中的值的列名,这里是 ‘Value’ 列。

1.2 透视表

  使用了 pd.pivot_table() 函数创建一个透视表。pivot_table() 函数可以帮助我们在 pandas 中进行数据透视操作,并实现将一个 DataFrame 中的值按照指定的行和列进行聚合
  即 将行变为列,我们可以这么实现:

>>> df4 = pd.pivot_table(df2,values='Value',index='Date',columns='Type'])

  下面来解释一下里面出现的各参数的含义:
  其中,‘df2’ 是原始的 DataFrame,‘Value’ 是要聚合的数值列名,‘Date’ 是新 DataFrame 的索引列名,而 ‘Type’ 是新 DataFrame 的列名
  pd.pivot_table() 函数会将 df2 中的数据按照 ‘Date’ 和 ‘Type’ 进行分组,并计算每个组中 ‘Value’ 列的聚合值(默认为均值)。然后,将聚合后的结果填充到新的 DataFrame df4 中,其中 每一行表示一个日期,每一列表示一个类型
  如果在透视表操作中存在重复的索引/列组合,pivot_table() 函数将会使用默认的聚合方法(均值)进行合并。如果我们想要使用其他聚合函数,可以通过传递 aggfunc 参数来进行设置,例如 aggfunc=‘sum’ 表示求和。

1.3 堆栈/反堆栈

  stack() 和 unstack() 是 pandas 中用于处理层次化索引的函数,可以在 多级索引的 DataFrame 中透视行和列标签

>>> stacked = df5.stack() 
# 透视列标签
# 使用 stack() 函数将列标签透视,即将列标签转换为行索引,并将相应的数据堆叠起来。这样可以创建一个具有多级索引的 Series
>>> stacked.unstack()
# 透视索引标签
# 上述代码则使用 unstack() 函数将索引标签透视,即将行索引转换为列标签,并将相应的数据重新排列。这样可以还原出原始的 DataFrame 结构

在这里插入图片描述

1.3 融合

  我们需要 将指定的列转换为一个观察值列时,可以使用 pd.melt() 函数来将一个 DataFrame 进行融合操作(melt)
  将列转为行:

>>> pd.melt(df2,id_vars=["Date"],value_vars=["Type","Value"],value_name="Observations")

在这里插入图片描述
  其中,df2 是原始的 DataFrame,id_vars=[“Date”] 表示保持 ‘Date’ 列不融合,作为 标识变量也就是保持不动的列)。value_vars=[“Type”, “Value”] 指定要融合的列为 ‘Type’ 和 ‘Value’。value_name=“Observations” 表示新生成的观察值列的名称为 ‘Observations’。
  pd.melt() 函数将指定的列进行融合操作,并创建一个新的 DataFrame。融合后的 DataFrame 中会包含四列,分别是融合后的标识变量(‘Date’)融合的列名(‘variable’)融合的值(‘Observations’)以及原始 DataFrame 中对应的观察值


二、迭代

  df.iteritems()是一个 DataFrame 的迭代器方法,用于按列迭代 DataFrame。它返回一个生成器,每次迭代生成一个包含列索引和对应列的序列的键值对
  df.iterrows() 也是一个 DataFrame 的迭代器方法,用于按行迭代 DataFrame。它返回一个生成器,每次迭代生成一个包含行索引和对应行的序列的键值对

>>> df.iteritems() 
# (列索引,序列)键值对
>>> df.iterrows()
# (行索引,序列)键值对

  下面是一些基本操作:

for column_index, column in df.iteritems():# 对每一列进行操作print(column_index)  # 打印列索引print(column)  # 打印列的序列for index, row in df.iterrows():# 对每一行进行操作print(index)  # 打印行索引print(row)  # 打印行的序列

三、高级索引

3.1 基础选择

  DataFrame 中基于条件选择列的操作如下,都是一些基本的操作:

>>> df3.loc[:,(df3>1).any()] 
# 选择任一值大于1的列
>>> df3.loc[:,(df3>1).all()] 
# 选择所有值大于1的列
>>> df3.loc[:,df3.isnull().any()] 
# 选择含 NaN值的列
>>> df3.loc[:,df3.notnull().all()] 
# 选择含 NaN值的列

3.2 通过isin选择

  而在很多情况下,我们所需要做的不是仅仅通过基于条件选择列这么简单的操作,所以还有必要学习 DataFrame 的进一步选择和筛选操作

>>> df[(df.Country.isin(df2.Type))] 
# 选择为某一类型的数值 
>>> df3.filter(items=”a”,”b”]) 
# 选择特定值
>>> df.select(lambda x: not x%5) 
# 选择指定元素

3.3 通过Where选择

  where()是Pandas Series对象中的一个方法,也可以用于选择满足条件的子集

>>> s.where(s > 0)
# 选择子集

3.4 通过Query选择

>>> df6.query('second > first')
# 查询DataFrame

  df6.query(‘second > first’)DataFrame 对象中的一个查询操作,查询 DataFrame df6 中满足条件 “second > first” 的行。其中,“second” 和 “first” 是列名,表示要比较的两个列。只有满足条件的行会被选中并返回为一个新的 DataFrame


3.5 设置/取消索引

>>> df.set_index('Country')
# 设置索引
>>> df4 = df.reset_index()
# 取消索引
>>> df = df.rename(index=str,columns={"Country":"cntry","Capital":"cptl","Population":"ppltn"})
# 重命名DataFrame列名

3.6 重置索引

  有时候我们需要重新索引 Series
  将 Series s 的索引重新排列为 [‘a’, ‘c’, ‘d’, ‘e’, ‘b’],并返回一个新的 Series。如果 原来的索引中不存在某个新索引值对应的值将被设置为 NaN(缺失值)

>>> s2 = s.reindex(['a','c','d','e','b'])

3.6.1 前向填充

>>> df.reindex(range(4), method='ffill')Country Capital  Population0 Belgium Brussels 111908461 India  New Delhi 13031710352 Brazil  Brasília 2078475283 Brazil  Brasília 207847528

3.6.2 后向填充

>>> s3 = s.reindex(range(5), method='bfill')0 3 1 32 33 34 3

3.7 多重索引

>>> arrays = [np.array([1,2,3]),
np.array([5,4,3])]
>>> df5 = pd.DataFrame(np.random.rand(3, 2), index=arrays)
>>> tuples = list(zip(*arrays))
>>> index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
>>> df6 = pd.DataFrame(np.random.rand(3, 2), index=index)
>>> df2.set_index(["Date", "Type"]) 

四、重复数据

>>> s3.unique() 
# 返回唯一值
>>> df2.duplicated('Type')
# 查找重复值
>>> df2.drop_duplicates('Type', keep='last') 
# 去除重复值
>>> df.index.duplicated()
# 查找重复索引

五、数据分组

5.1 聚合

>>> df2.groupby(by=['Date','Type']).mean()
>>> df4.groupby(level=0).sum()
>>> df4.groupby(level=0).agg({'a':lambda x:sum(x)/len(x),
'b': np.sum})

5.2 转换

>>> customSum = lambda x: (x+x%2)
>>> df4.groupby(level=0).transform(customSum)

六、缺失值

>>> df.dropna()
# 去除缺失值NaN
>>> df3.fillna(df3.mean())
# 用预设值填充缺失值NaN
>>> df2.replace("a", "f") 
# 用一个值替换另一个值

七、合并数据

7.1 合并-Merge

在这里插入图片描述

>>> pd.merge(data1, data2, how='left', on='X1')

  将 data1data2 两个 DataFrame 按照它们的 ‘X1’ 列进行左连接,并返回一个新的 DataFrame左连接保留 data1 的所有行,并将 data2 中符合条件的行合并到 data1 中。如果 data2 中没有与 data1 匹配的行,则对应的列值将被设置为 NaN(缺失值)。
在这里插入图片描述

>>> pd.merge(data1, data2, how='right', on='X1')

  右连接也是一种连接方式,其将 data1data2 两个 DataFrame 按照它们的 ‘X1’ 列进行右连接,并返回一个新的 DataFrame保留 data2 的所有行,并将 data1 中符合条件的行合并到 data2 中。如果 data1 中没有与 data2 匹配的行,则对应的列值将被设置为 NaN(缺失值)。
在这里插入图片描述

>>> pd.merge(data1, data2,how='inner',on='X1')

  将 data1data2 两个 DataFrame 按照它们的 ‘X1’ 列进行内连接,并返回一个新的 DataFrame就是所谓的内连接(inner join)。它 仅保留 data1 和 data2 中在 ‘X1’ 列上有匹配的行,并将它们合并到一起。
  参数中的 how=‘inner’ 表示使用内连接方式进行合并。其他可能的取值还有 ‘left’、‘right’ 和 ‘outer’,分别表示左连接右连接和接下来要介绍的外连接。on=‘X1’ 表示使用 ‘X1’ 列作为合并键(即共同的列)。
在这里插入图片描述

>>> pd.merge(data1, data2, how='outer',on='X1')

  将 data1data2 两个 DataFrame 按照它们的 ‘X1’ 列进行外连接,并返回一个新的 DataFrame。外连接(outer join)是一种合并方式,它会保留 data1 和 data2 中所有的行,并将它们根据 ‘X1’ 列的值进行合并。
  在外连接中,如果某个 DataFrame 中的行在另一个 DataFrame 中找不到匹配,那么对应的列值将被设置为 NaN(缺失值),表示缺失的数据


7.2 连接-Join

>>> data1.join(data2, how='right')

7.3 拼接-Concatenate

7.3.1 纵向拼接

>>> s.append(s2)

7.3.2 横向/纵向拼接

>>> pd.concat([s,s2],axis=1, keys=['One','Two']) 
>>> pd.concat([data1, data2], axis=1, join='inner')

八、日期

>>> df2['Date']= pd.to_datetime(df2['Date'])
>>> df2['Date']= pd.date_range('2000-1-1', periods=6, freq='M')
>>> dates = [datetime(2012,5,1), datetime(2012,5,2)]
>>> index = pd.DatetimeIndex(dates)
>>> index = pd.date_range(datetime(2012,2,1), end, freq='BM')

九、可视化

Matplotlib 是一个用于绘制数据可视化图形的 Python 库。它提供了各种函数和工具,用于创建各种类型的图表,包括线图、散点图、柱状图、饼图等等。

  现在我们导入 Matplotlib 库,并将其重命名为了 plt。这样,我们就可以 使用 plt 对象来调用 Matplotlib 的函数和方法,以便创建和修改图形了。

>>> import matplotlib.pyplot as plt

  现在,我们试试导入 Matplotlib 库使用 Pandas 库中 Series 对象.plot() 方法Matplotlib 库中的 plt.show() 函数 来生成并显示数据的默认图形。

>>> s.plot()
>>> plt.show()

在这里插入图片描述
我们也可使用 Pandas 库中 DataFrame 对象.plot() 方法Matplotlib 库 中的 plt.show() 函数 来生成并显示数据的默认图形。

>>> df2.plot()
>>> plt.show()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建Web服务器并用cpolar发布至公网访问

本地电脑搭建Web服务器并用cpolar发布至公网访问 文章目录 本地电脑搭建Web服务器并用cpolar发布至公网访问前言1. 首先在电脑安装PHPStudy、WordPress、cpolar2. 安装cpolar,进入Web-UI界面3. 安装wordpress4. 进入wordpress网页安装程序5. 利用cpolar建立的内网穿…

FL Studio 21最新for Windows-21.1.0.3267中文解锁版安装激活教程及更新日志

FL Studio 21最新版本for Windows 21.1.0.3267中文解锁版是最新强大的音乐制作工具。它可以与所有类型的音乐一起创作出令人惊叹的音乐。它提供了一个非常简单且用户友好的集成开发环境(IDE)来工作。这个完整的音乐工作站是由比利时公司 Image-Line 开发…

OpenAI全球招外包大军,手把手训练ChatGPT取代码农 ; 码农:我自己「杀」自己

目录 前言 OpenAI招了一千多名外包人员,训练AI学会像人类一样一步步思考。如果ChatGPT「学成归来」,码农恐怕真的危了? 码农真的危了! 当时OpenAI也说,ChatGPT最合适的定位,应该是编码辅助工具。 用Cha…

设计模式之原型模式详解

前言 在设计模式的系列文章中,我们前面已经写了工厂模式、单列模式、建造者模式,在针对创建型模式中,今天想跟大家分享的是原型模式,我觉的这种模式叫克隆模式会更佳恰当。原型模式的目的就是通过复制一个现有的对象来生成一个新…

【Linux】生产者消费者模型

目录 什么是生产消费者模型 为什么要使用生产消费者模型 基于阻塞队列的生产消费者模型 什么是生产消费者模型 生产者消费者模型是一种常见的并发编程模型,用于解决生产者和消费者之间数据交换和同步的问题。在这个模型中,生产者会生成数据并将其放入…

Spring之AOP的特性

一. AOP简介 AOP是Aspect-Oriented Programming的缩写,即面向切面编程。利用oop思想,可以很好的处理业务流程,但是不能把系统中某些特定的重复性行为封装到模块中。例如,在很多业务中都需要记录操作日志,结果我们不得…

HTML5 游戏开发实战 | 五子棋

01、五子棋游戏设计的思路 在下棋过程中,为了保存下过的棋子的信息,使用数组 chessData。chessData[x][y]存储棋盘(x,y)处棋子信息,1 代表黑子,2 代表白子,0…

【100天精通python】Day38:GUI界面编程_PyQT从入门到实战(中)

目录 专栏导读 4 数据库操作 4.1 连接数据库 4.2 执行 SQL 查询和更新: 4.3 使用模型和视图显示数据 5 多线程编程 5.1 多线程编程的概念和优势 5.2 在 PyQt 中使用多线程 5.3 处理多线程间的同步和通信问题 5.3.1 信号槽机制 5.3.2 线程安全的数据访问 Q…

高效数据传输:轻松上手将Kafka实时数据接入CnosDB

本篇我们将主要介绍如何在 Ubuntu 22.04.2 LTS 环境下,实现一个KafkaTelegrafCnosDB 同步实时获取流数据并存储的方案。在本次操作中,CnosDB 版本是2.3.0,Kafka 版本是2.5.1,Telegraf 版本是1.27.1 随着越来越多的应用程序架构转…

Linux驱动开发之点亮三盏小灯

头文件 #ifndef __HEAD_H__ #define __HEAD_H__//LED1和LED3的硬件地址 #define PHY_LED1_MODER 0x50006000 #define PHY_LED1_ODR 0x50006014 #define PHY_LED1_RCC 0x50000A28 //LED2的硬件地址 #define PHY_LED2_MODER 0x50007000 #define PHY_LED2_ODR 0x50007014 #define…

TiDB基础介绍、应用场景及架构

1. 什么是newsql NewSQL 是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性。 NewSQL是指这样一类新式的关系型数据库管理系统,针对OLTP(读-写&…

移动通信系统的LMS自适应波束成形技术matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... idxx0; while idxx&…

docker 基础知识

目录 1. 加载docker镜像 2. 显示所有的镜像 3. 执行镜像,生成容器, 每执行一次,便生成一个容器 4. 显示出container名称 5. 进入容器 6. 如何将文件传入容器内 首先要确保已经安装了docker。注意:服务器上若没有管理员权限&am…

(贪心) 剑指 Offer 14- II. 剪绳子 II ——【Leetcode每日一题】

❓剑指 Offer 14- II. 剪绳子 II 难度:中等 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n 都是整数,n > 1 并且 m>1 ),每段绳子的长度记为 k[0],k[1]...k[m - 1] 。请问 k[0]*k[1]*.…

数据结构的图存储结构

目录 数据结构的图存储结构 图存储结构基本常识 弧头和弧尾 入度和出度 (V1,V2) 和 的区别,v2> 集合 VR 的含义 路径和回路 权和网的含义 图存储结构的分类 什么是连通图,(强)连通图详解 强连通图 什么是生成树,生…

小程序-基于vant的Picker组件实现省市区选择

一、原因 因vant/area-data部分的市/区数据跟后台使用的高德/腾讯省市区有所出入,故须保持跟后台用同一份数据,所以考虑以下几个组件 1、Area 2、Cascader 3、Picker 因为使用的是高德地图的省市区json文件,用area的话修改结构代价太大&…

解锁园区交通新模式:园区低速自动驾驶

在当今科技飞速发展的时代,自动驾驶技术成为了备受关注的领域之一。尤其是在园区内部交通管理方面,自动驾驶技术的应用正在日益受到重视。 园区低速自动驾驶的实现需要多个技术领域的协同合作,包括自动驾驶技术、计算机视觉技术、通信技术、物…

KVM虚拟机管理

1、创建、删除快照 关机 init0 列出快照 删除快照 2、虚拟机迁移 报错 解决:关闭防火墙,关闭selinux 其他解决办法:kvm热迁移使用nfs共享存储报错_莉法的博客-CSDN博客

神经网络基础-神经网络补充概念-14-逻辑回归中损失函数的解释

概念 逻辑回归损失函数是用来衡量逻辑回归模型预测与实际观测之间差异的函数。它的目标是找到一组模型参数,使得预测结果尽可能接近实际观测。 理解 在逻辑回归中,常用的损失函数是对数似然损失(Log-Likelihood Loss)&#xff…

网络安全 Day30-运维安全项目-容器架构上

容器架构上 1. 什么是容器2. 容器 vs 虚拟机(化) :star::star:3. Docker极速上手指南1)使用rpm包安装docker2) docker下载镜像加速的配置3) 载入镜像大礼包(老师资料包中有) 4. Docker使用案例1) 案例01::star::star::…