【数据分析】Numpy和Pandas库基本用法及实例--基于Japyter notebook实现

news/2024/7/22 13:51:10/文章来源:https://blog.csdn.net/2301_81874719/article/details/139077641
各位大佬好 ,这里是阿川的博客 , 祝您变得更强

在这里插入图片描述 个人主页:在线OJ的阿川

大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

阿川水平有限,如有错误,欢迎大佬指正 在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

承接上篇的博客

数据分析—技术栈和开发环境搭建
Python初阶
Python–语言基础与由来介绍
Python–注意事项
Python–语句与众所周知

目录

  • Numpy
    • 数组类
      • 具体操作
  • Pandas
    • 基本类
    • Series类
      • 具体操作
    • DataFrame类

数据分析最常用的两个库为Numpy和Pandas
用的编辑器为Jupyter notebook
接下来的代码将基于该编辑器中实现

Numpy

  • 首先先在cmd(命令提示符当中安装该库

在这里插入图片描述

  • 使用该库,还要在jupyter notebook导入该库

数组类

  • .array()方法 创建数组
  • .ndim 方法 查看数组维数
  • .shape 方法 以元组的形式查看数组几维几元素
  • .size 方法 查看数组元素总个数
  • .dtype 方法 查看数组元素类型
  • .zeros(n) 方法 创建n个为0的数组
  • .ones(n)方法 创建n个为1的数组
    • n为任意数字
    • 数组元素类型为浮点型
  • .arange( n,n , n)方法 创建以n到n,左闭右开,步长为n的数组
  • .concatenate()方法 将多个数组连接一起,并不改变各个数组
  • .sort()方法 对数组进行排序
  • [索引 ] 数组可以通过索引进行查找
  • [ n:n ] 数组可以通过切片进行查找
    • n表示任意数字
  • 数组 + 数组 数组相加,表示拼接数组
  • 数组 * n 表示利用数组的广播机制,对数组每个元素都乘以n
    • 广播机制

在这里插入图片描述

  • .max()方法 表示数组的最大元素
  • .min()方法 表示数组的最小元素
  • .sum()方法 表示数组元素总和
  • .mean()方法 表示数组元素的平均值
  • 数组[ () I或者& ()] 表示数组中加条件

具体操作

具体操作的图:

在这里插入图片描述

在这里插入图片描述

如果你想练习以上方法,这里有些题:
在这里插入图片描述
在这里插入图片描述
答案是

import numpy as np
arr1 =np.array([6, 2, -7, 2, 8, -2, 1])
arr1
arr2 = np.array([[1, 3, 5], [2, 4, 6]])
arr2
print(arr1.ndim)
print(arr2.ndim)
print(arr1.shape)
print(arr2.shape)
print(arr1.size)
print(arr2.size)
print(arr1.dtype)
print(arr2.dtype)
arr3 = np.zeros(6)
arr3
arr4 = np.ones(5)
arr4
arr5 = np.arange(10, 21, 2)
arr5
import numpy as np
arr1 = np.array([1, 3, 2, 4, 9])
arr1
arr2 = np.ones(5)
arr2
arr3 = np.zeros(5)
arr3
arr_sum = np.concatenate([arr1, arr2, arr3])
arr_sum
arr1.sort()
arr1
print(arr1[2])
print(arr1[-3])
print(arr1[1:4])
arr1 + arr2
arr1 * 5
print(arr1.max())
print(arr1.min())
print(arr1.sum())
print(arr1.mean())
arr1[(arr1 < 1) | (arr1 > 3)]

Pandas

Pandas库中有两个最重要的方法

  • .Series()
  • .DataFrame()

基本类

  • .iloc[ ] 以位置索引查找数组元素,位置索引从零开始,可以与切片搭配使用
  • .loc[ ]以标签索引查找数组元素,可以与切片搭配使用
  • [()|或者d ()] 条件选择数组元素
  • .add()方法 将两个数组相加,且参数中可以加缺失值
  • 若不写缺失值 则两个数组默认相同索引相加 如果没有相同索引则会报错
  • .describe()方法 打印统计信息
    • 元素数量count
    • 元素平均值mean
    • 元素标准差std
    • 元素前1/4(25%)
    • 元素前2/4(50%)
    • 元素前3/4(75%)
    • 元素最大值max
    • 元素类型dtype
  • .apply Python中的高阶函数 可以包含其他函数
  • .index 展示索引
  • .columns 展示维度
  • .T 表示对数组转置
  • .head(n)表示展示数组中的前面n行
  • .drop([“标签索引” ],axis=0或者1) 表示删除针对于某行或者某列的该标签索引的数据
  • axis=0 表示行(实际操作是列)
  • axis=1 表示列(实际操作是行)
  • 在这里插入图片描述
  • lambda关键词 这是Python当中的关键词与apply()搭配使用,可以实现具体的函数
  • applymap(普通函数) 表示将数组中的每个元素放入普通函数中

Series类

  • .Series([ ]) 创建一维表格且索引默认为零开始
  • .Series([ ],index = [ ])创建表格且指定索引
  • .Series({ })创建字典类型表格

具体操作

具体操作的图
在这里插入图片描述
在这里插入图片描述
如果你想练习以上方法,这里有些题:
在这里插入图片描述
在这里插入图片描述
答案是:

import pandas as pd
s1 = pd.Series([-1.2, 3.7, 2.5, -8.2, 6.3])
s1
s2 = pd.Series([1, 2, 3, 4, 5], index=[5, 4, 3, 2, 1])
s2
print(s2.iloc[1])
s2.loc[5:3]
s3 = pd.Series({"小李":82, "小陈":93, "小张":91, "小曾":78, "小邓":68})
s3
s3.loc["小张"] = 95
s3
s3[(s3 > 80) & (s3 < 90)]
import pandas as pd
s1 = pd.Series([92, 67, 70, 88, 76], index = ["小明", "小红", "小杰", "小丽", "小华"])
s1
s2 = pd.Series([95, 85, 60, 79, 76], index = ["小明", "小杰", "小宇", "小娟", "小彤"])
s2
s1.add(s2, fill_value = 0)
s1.describe()
s1 = s1 + 5
s1
def get_grade_from_score(score):if score > 90:return "A"elif score > 80:return "B"elif score > 70:return "C"elif score > 60:return "D"else:return "不及格"
s1.apply(get_grade_from_score)

DataFrame类

  • .DataFrame()创建二维表格,默认标签为列标签
    • 这里的二维是指两个维度
      • 分别为列维度和行维度
        • 列标签和行标签
  • .DataFrame[" 列标签"] 表示以该列标签索引查找表格元素
  • .DataFrame[“列标签”:“列标签”] 表示以多个该列标签索引搜索数据
  • DataFrame.loc[ “行标签”,“列标签”] 表示以该行标签和列标签索引搜索数据
  • Series+DataFrame 可以相加,但要注意标签索引要相对应
  • DataFrame +n 表示当中元素数据+n
    • n表示任意数字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果你想练习以上方法,这里有些题:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
答案是

import pandas as pd
name = pd.Series(["小陈", "小李", "小王", "小张", "小赵", "小周"], index=[1, 2, 3, 4, 5, 6])
gender = pd.Series(["女", "女", "男", "男", "女", "男"], index=[6, 5, 4, 3, 2, 1])
height = pd.Series([172.5, 168.0, 178.2, 181.3, 161.7], index=[1, 2, 3, 4, 5])
students = pd.DataFrame({"姓名":name, "性别":gender, "身高":height})
students
print(students.index)
print(students.columns)
students.T
students["身高"]
students[["性别", "身高"]]
students.loc["3":"5"]
students.loc["3":"5", "姓名":"身高"]
students.loc["3":"5", : ]
students[(students["身高"] > 165) & (students["性别"] == "女")]
students.head(5)
import pandas as pd
students = {"1":{"姓名" :"小陈", "考试1":85, "考试2":95, "考试3":92}, "2":{"姓名":"小李", "考试1":91, "考试2":92, "考试3":94}, "3":{"姓名":"小王", "考试1":86, "考试2":81, "考试3":89}, "4":{"姓名":"小张", "考试1":79, "考试2":89, "考试3":95}, "5":{"姓名":"小赵", "考试1":96, "考试2":91, "考试3":91},  "6":{"姓名":"小周", "考试1":81, "考试2":89, "考试3":92}}
students = pd.DataFrame(students).T
students
students["考试4"] = [72, 69, 79, 83, 82, 76]
students
students.loc["7"] = {"姓名":"小杨", "考试1":79, "考试2":82, "考试3":81, "考试4":69}
students
students.drop(["6", "7"], axis = 0)
students.drop(["考试2", "考试4"], axis = 1)
bonus = pd.Series({"考试1":2, "考试2":3, "考试3":2, "考试4":5})
bonus
bonus + students[["考试1", "考试2", "考试3", "考试4"]]
students["考试4"] = students["考试4"] + 10
students
import pandas as pd
import numpy as np
students = {"1":{"姓名" :"小陈", "考试1":85, "考试2":95, "考试3":92}, "2":{"姓名":"小李", "考试1":91, "考试2":92, "考试3":94}, "3":{"姓名":"小王", "考试1":86, "考试2":81, "考试3":89}, "4":{"姓名":"小张", "考试1":79, "考试2":89, "考试3":95}, "5":{"姓名":"小赵", "考试1":96, "考试2":91, "考试3":91},  "6":{"姓名":"小周", "考试1":81, "考试2":89, "考试3":92}}
students = pd.DataFrame(students).T
students
score_average = students.loc[ : , "考试1":"考试3"].mean(axis = 1)
name = students["姓名"]students_average = pd.DataFrame({"姓名":name, "平均分":score_average})
students_average
students.loc[ : , "考试1":"考试3"].apply(lambda x: np.sort(x)[-2])
def grade_from_score(score):if score >= 95:return "A+"elif score >= 90:return "A"elif score >= 85:return "B+"elif score >= 80:return "B"elif score >= 75:return "C+"else:return "C"
students.loc[ : , "考试1":"考试3"].applymap(grade_from_score)
students["考试1"] = students["考试1"].astype("int")
students["考试2"] = students["考试2"].astype("int")
students["考试3"] = students["考试3"].astype("int")
students.describe()

请踏实的走好每一步路,一定会变得更强

好的,到此为止啦,祝您变得更强

在这里插入图片描述

道阻且长 行则将至

个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

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

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

相关文章

工作纪实50-Idea下载项目乱码

下载了公司的一份项目代码&#xff0c;发现是gbk格式的&#xff0c;但是我的日常习惯又是utf-8&#xff0c;下载项目以后全是乱码&#xff0c;一脸懵 借用网友的一张图&#xff0c;如果是一个一个文件这么搞&#xff0c;真的是费劲&#xff0c;好几百个文件&#xff01; 步骤…

React@16.x(11)ref

目录 1&#xff0c;介绍1.1&#xff0c;得到的结果 2&#xff0c;参数类型2.1&#xff0c;字符串&#xff08;不再推荐&#xff09;2.2&#xff0c;对象2.3&#xff0c;函数函数调用时机 3&#xff0c;注意点 1&#xff0c;介绍 reference 引用。和 vue 中的 refs 类似&#x…

rk3568_mutex

文章目录 前言1、什么是mutex?1.1mutex互斥体API函数二、实验2.1实验目的2.2源码2.3结果图前言 本文记录的是rk3568开发板基础上做的mutex实验 1、什么是mutex? mutex是互斥体,它是比信号量semaphore更加专业的机制。 在我们编写Linux驱动的时候遇到需要互斥的地方建议使用…

TypeScript系列之-- 数组和元组类型

数组的定义&#xff1a; 第一种&#xff0c;可以在元素类型后面接上[] let list: number[] [1, 2, 3]; 第二种方式是使用数组泛型&#xff0c;Array<元素类型> let list: Array<number> [1, 2, 3]; 如果数组想每一项放入不同数据怎么办&#xff1f;用元组类型…

UE5 双手握剑的实现(逆向运动学IK)

UE5 双手握剑的实现 IK 前言 什么是IK&#xff1f; UE官方给我们提供了很多对于IK处理的节点&#xff0c;比如ABRIK、Two Bone IK、Full Body IK 、CCD IK等&#xff0c;但是看到这&#xff0c;很多人就好奇了&#xff0c;什么是IK&#xff1f; 首先我们来看看虚幻小白人的骨…

leetcode-主持人调度(二)-110

题目要求 思路 1.先将开始时间和结束时间拆分放到两个数组中进行排序 2.如果开始的时间小于结束时间&#xff0c;说明目前没有空闲的人&#xff0c;需要增加人&#xff0c;如果大于等于&#xff0c;说明有人刚结束了主持&#xff0c;可以进行新的主持了&#xff0c;变更到下一…

Java实现对PDF、纵向、横向页面添加自定义水印功能

Java实现对PDF、纵向、横向页面添加自定义水印 效果图 -- 纵向 页面PDF使用到JAR Maven依赖版本效果图 -- 横向页面PDF 效果图 – 纵向 页面PDF 代码如下&#xff1a; 使用到JAR Maven依赖版本 <dependency><groupId>org.apache.pdfbox</groupId><artifa…

2024.05.28学习记录

1. 小林coding 计网复习 2.代码随想录刷题. 图论.和复习数组.链表 3.rosebush完成select组件

BLE蓝牙模块在车联网中的智能开锁、数据监控应用

随着科技的不断发展&#xff0c;车联网已经成为了汽车行业的一个热门话题。在这个领域中&#xff0c;BLE蓝牙模块发挥着重要的作用&#xff0c;特别是在智能开锁和数据监控方面的应用。本文将详细介绍BLE蓝牙模块在这两个方面的应用及其优势。   一、智能开锁   1.车辆远程…

安卓开发--安卓使用Echatrs绘制折线图

安卓开发--安卓使用Echatrs绘制折线图 前期资料安卓使用Echarts绘制折线图1.1 下载 Echarts 安卓资源1.2 新建assets文件1.3 新建布局文件1.4 在布局文件中布局WebView1.5 在活动文件中调用 最终效果 前期资料 Echarts 官网样式预览: https://echarts.apache.org/examples/zh/…

MySQL中视图是什么,有什么作用

目录 一、视图的简介 1.1 什么是视图&#xff1f; 1.2 为什么使用视图&#xff1f; 1.3 视图有哪些规则与限制&#xff1f; 1.4 视图能否更新&#xff1f; 二、视图的创建 三、视图的作用 3.1 用视图简化复杂的联结 3.2 用视图格式化检索出的数据 3.3 用视图过滤数据…

实现echarts多图联动效果

实现echarts多图联动效果 文章目录 实现echarts多图联动效果业务场景实现关键api代码示例&#xff08;vue&#xff09; 业务场景 提示&#xff1a;主要是记录一下多个echarts联动效果实现方案 这本来就是echarts本身自带的api&#xff0c;并没有多高级&#xff0c;奈何寻找的过…

关于MySQL特殊储存引擎的介绍

目录 ——什么是储存引擎&#xff1f; ——关于表的储存引擎查询和建表语句 ---查询建表引擎语句 ---查询当前数据库支持的储存引擎 ---指定建表的储存引擎 ——关于特殊储存引擎的介绍 ---INNODB 特点&#xff1a; 关于INNDB的文件&#xff1a; 逻辑储存结构 ---MyI…

利用cherry pick巧妙地将某次提交单独合并到其他分支

0. 引言 最近在进行系统的多版本并行开发&#xff0c;涉及一些共有基础功能提交时就遇到了麻烦&#xff0c;一份代码需要向多个版本分支进行同步&#xff0c;以保证多版本都能有更新该基础功能。 多次对比提交的方式显然会带来巨大的工作量。但实际上我们可以通过git的cherry…

ES 查询踩坑-全字段匹配

需求&#xff1a;name字段需要全匹配查询 name的映射 普通的must查询 GET power_engin/_search {"from": 0,"size": 10,"query": {"bool": {"must": [{"term": {"name": {"value": "尼…

Java时间类--JDK8

为什么JDK8会又新增时间相关类呢&#xff1f; ① JDK7的时间对象如果需要比较大小的话&#xff0c;必须都先转换成毫秒值&#xff1b;JDK8则不需要&#xff0c;可以直接比较。 ② JDK7的时间对象可以修改&#xff0c;在多线程环境下就会导致数据不安全&#xff1b;JDK8不能修改…

如何找到docker的run(启动命令)

使用python三方库进行 需要安装python解释器 安装runlike安装包 pip3 install runlike 运行命令 runlike -p <container_name> # 后面可以是容器名和容器id&#xff0c;-p参数是显示自动换行实验 使用docker启动一个jenkins 启动命令为 docker run -d \ -p 9002:80…

7个靠谱的副业赚钱方法,宝妈,上班族,学生党可以做的兼职副业

你是否也曾面临过这样的困境&#xff1a;生活费紧张&#xff0c;想要找份兼职来补贴家用或是满足自己的小心愿&#xff1f;别担心&#xff0c;今天我将带领你踏入这个丰富多彩的兼职世界&#xff0c;助你轻松达成月入过千的小目标&#xff01; 在我漫长的兼职探索旅程中&#…

预训练模型语义相似性计算(十一) - M3E和BGE

M3E m3e由MokaAI 训练&#xff0c;开源和评测。 m3e的详细介绍可以看官方的github介绍。本文简要摘录其中一些点&#xff0c;以便后续的应用。 1.千万级 (2200w) 的中文句对数据(开源)。 2.支持同质相似句计算(s2s)和异质检索(s2p)&#xff0c;后续支持代码检索。 3.m3e基座模…

Nature 正刊!瑞典于默奥大学研究团队在研究全球河流和溪流的甲烷排放中取得新进展

甲烷(CH4)是一种强有力的温室气体&#xff0c;自工业革命以来&#xff0c;其在大气中的浓度增加了两倍。有证据表明&#xff0c;全球变暖增加了淡水生态系统的 CH4 排放&#xff0c;为全球气候提供了积极的反馈。然而&#xff0c;对于河流和溪流来说&#xff0c;甲烷排放的控制…