灰太狼的数据世界(二)

简介: 灰太狼的数据世界(二)

上一篇数据文章中,我们介绍了Numpy里面的一些结构,那么这次我们来介绍一些更好玩的东西----Pandas。Pandas这个东西在数据的世界里用的还是很频繁的,主要是用起来会比较方便。相对Numpy而言的话,pandas属于那种青出于蓝而胜于蓝这样的一个角色。pandas是基于numpy的基础上进行开发的,所以安装pandas的时候会自带性的把numpy也安装上去。

640.jpg

上期的内容我们主要是针对Numpy里面的一些数据结构和统计函数做了一番介绍,了解了ndarry是怎样的一个结构(说白了就是一个数据,或是一个矩阵),那么今天我们来看看,在Pandas里面又有怎样的一个数据结构呢?




今天我们就主要来聊聊Series~~~~


Pandas Series


Pandas里面的Serise是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。(注意:Series中的索引值是可以重复的)

我们可以看一下下面这一张图:

640.png

这样的一列就是一个Series。 对于每一列而言,他们都是一个series,这就像数据库表里面的列。

那我们来看看下面这张图,如何来创建一个Series。

640.png

直接使用pandas去找Series就可以啦!


import pandas as pd
a = pd.Series([1, 2, 3, 4])
b = pd.Series(data=[1, 2, 3, 4],
              index=['a', 'b', 'c', 'd'])
print(a)
print(b)

我们来看一下运行结果:

a的运行结果就是一列索引对应着一列值(索引的值和给的值是一一对应的~~就和python里面的字典一样)。如果没有指定索引的值,默认是从0开始的,就和python里面的list取值是一样的。

如果需要改变索引,只需要在Series方法里面加上index参数即可修改索引,不过要注意的是,给定数据的长度要和索引的长度是一样的,这样才会生效,否则就会报错。


下面我们来看一下series的属性:

编号 属性/方法 描述
1 axes 返回行轴标签列表。
2 dtype 返回对象的数据类型(dtype)。
3 empty 如果系列为空,则返回True。
4 ndim 返回底层数据的维数,默认定义:1。
5 size 返回基础数据中的元素数。
6 values 将系列作为ndarray返回。
7 head() 返回前n行。
8 tail() 返回最后n行。


下面问题来了,我们如何结合Numpy去创建一个Series呢?

import numpy as np
import pandas as pd
data = np.array(['Amy', 'Ben', 'Candy', 'David'])
A = pd.Series(data)
print(A)

我们可以直接把ndarray生成的数据当作参数放到Serise里面。


如果想指定索引的值可以加上index参数:


mport numpy as np
import pandas as pd
data = np.array(['Amy', 23, '女', 99])
A = pd.Series(data,
              index=["name", "age", "gender", "point"])
print(A)

640.png

那如何使用字典创建Series呢?

data = {'a': 1, 'b': 2, 'c': 3}
B = pd.Series(data)
print(B)

640.png

也是直接创建即可。


讲完了创建那就来说一说取值吧,Series里面的值如何取出来呢?


Series值的获取主要有两种方式:

1、通过方括号+索引的方式读取对应索引的数据,有可能返回多条数据。

2、通过方括号+下标值的方式读取对应下标值的数据,下标值的取值范围为:

[0,len(Series.values));

另外下标值也可以是负数,表示从右往左获取数据。

import pandas as pd
A = pd.Series([1, 2, 3, 4, 5],
              index=['a', 'b', 'c', 'd', 'e'])
print(A[1])
print(A['a'])
print(A['d'])

可以使用默认索引,也可以使用给定的索引。

640.png

它还可以像python里面的list一样进行切片。

import pandas as pd
A = pd.Series([1, 2, 3, 4, 5],
              index=['a', 'b', 'c', 'd', 'e'])
print(A[:3])
print(A[4:2:-1])
print(A['a':'d'])
print(A['e':'c':-1])


640.png

Series里面的删除操作使用的是drop方法和pop方法:

import pandas as pd
series1 = pd.Series([10, 20, 30, 40], index=list('abcd'))
# 删除元素返回副本
print(series1.drop('c'))
print(series1.drop(['a', 'd']))
# 删除源数据中的元素
series1.pop('d')
print(series1)

640.png

使用drop方法的时候会生成一个新的Series,新的Series里面就是删除该元素的Series,

使用pop方法删除,就是对原来的Series进行修改删除。

如果你想在Series中插入值的话,和字典的原理是一样的:

import pandas as pd
series1 = pd.Series([10, 20, 30, 40], index=list('abcd'))
# 新增一个标签索引值为f,值为100的元素
series1['f'] = 100
print(series1)


640.png

当然还可以使用append方法进行添加,但是和刚刚不一样的是,他会生成一个新的Series来存储添加后的数据:

series2 = pd.Series([100, 200], index=['g', 'h'])
series3 = series1.append(series2)
print(series3)


640.png

最后我们来说一下Series里面的统计函数。


1、求和函数SUM

import pandas as pd
val = [1000, 201, None, 104]
t = pd.Series(val, index=[1, 2, 3, 4])
print(t)
print('sum=', t.sum())

640.png

数学达到高数水平的可以简单看看下面这个表达式:



2、均值函数MEAN


import pandas as pd
val = [1000, 201, None, 104]
t = pd.Series(val, index=[1, 2, 3, 4])
print(t)
print('average=', t.mean())

640.png

同样的,数学表达式如下:

640.png


3、最大函数MAX

max函数可以返回series里最大值,而idxmax返回的是其index或者label。

import pandas as pd
val = [1000, 201, None, 104]
t = pd.Series(val, index=[1, 2, 3, 4])
print('max=', t.max())

640.png


4、方差函数VAR

方差说起来比较抽象,算起来就是拿每个数和平均数做差再平方,注意考量的就是这串数据的稳定性。方差越小越好,

举个例子,小明的高考冲刺模拟五次成绩是303,321,339,288,403,小刚的成绩是,323,351,343,328,311请问哪个同学的成绩更加稳定?

(不要问分数为什么这么低-------江苏省高考)

很明显我们可以看到小刚的成绩更加趋于稳定,因为小刚成绩的波动范围比较小,不像小明,波动的比较大。

那么我们用方差来论证这个观点:

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
xiaogang = [323, 351, 343, 328, 311]
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
print('xiaoming=', t.var())
print('xiaogang=', p.var())

640.png

很明显我们可以看到,小刚的方差更小,所以小刚的成绩更加稳定。

数学公式如下:


640.png

5、标准差函数STD

说的简单一点,他就是和方差一样的,也是考量一组数据的稳定性,具体值就是方差开平方。也就是把上面那个表达式的平方去掉即可。

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
xiaogang = [323, 351, 343, 328, 311]
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
print('xiaoming=', t.std())
print('xiaogang=', p.std())

640.png


数学表达式:

640.png



6、平均绝对离差函数MAD


平均绝对离差是用样本数据相对于其平均值的绝对距离来度量数据的离散程度。

画个图你就懂了:

640.png

红线就是平均值,红色的小点点就是一组数据,距离红线越近就越偏向稳定。用肉眼看来,很明显上面一个数据会比较好

我们依旧用小明和小刚的分数来算平均绝对离差:

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
xiaogang = [323, 351, 343, 328, 311]
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
print('xiaoming=', t.mad())
print('xiaogang=', p.mad())

640.png

还是小刚的数据比较小。

数学表达式:


640.png

(每个数据减去均值求绝对值,如何再求这些绝对值的平均值)

总的来说,我们期望数据的离散程度越小越好(就是分布的范围越小越好)。

上面的三个函数,都是用来计算数据的离散程度的。


7、协方差函数COV

表达式:

640.png

(别问我啥意思了,根据上面的表达式,自己猜一下吧-_-!

提示:方差是协方差的一种特殊情况,即当两个变量是相同的情况

看下面的代码理解一下:

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
xiaogang = [323, 351, 343, 328, 311]
average_xiaoming = pd.Series([330.8, 330.8, 330.8, 330.8, 330.8])
average_xiaogang = pd.Series([331.2, 331.2, 331.2, 331.2, 331.2])
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
print('xiaoming=', t.cov(average_xiaoming))
print('xiaogang=', p.cov(average_xiaogang))

640.png


8、偏太值函数SKEW

偏态值用于衡量成绩分布服从正态分布的程

正态分布,又叫常态分布,像一只倒扣的钟。两头低,中间高,左右对称。大部分数据集中在平均值,小部分在两端,如下图:

640.jpg

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
t = pd.Series(xiaoming)
print('xiaoming=', t.skew())

640.png

9、峰度函数KURT

峰度(Kurtosis)衡量实数随机变量概率分布的峰态。峰度高就意味着方差增大是由低频度的大于或小于平均值的极端差值引起的

640.jpg

在相同的标准差下,峰度系数越大,分布就有更多的极端值,那么其余值必然要更加集中在众数周围,其分布必然就更加陡峭。

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
t = pd.Series(xiaoming)
print('xiaoming=', t.kurt())


640.png



关于Series的内容差不多到这里就结束啦!有问题可以私信进行提问哦!(因为暂不支持留言,只能私信啦!)

相关文章
|
前端开发 Java 开发者
深入理解Spring Boot中的@Service注解
【4月更文挑战第22天】在 Spring Boot 应用开发中,@Service 注解扮演着特定的角色,主要用于标识服务层组件。本篇技术博客将全面探讨 @Service 注解的概念,并提供实际的应用示例,帮助开发者理解如何有效地使用这一注解来优化应用的服务层架构
2711 1
|
机器学习/深度学习 人工智能 开发工具
人工智能项目的python版本管理工具DVC
dvc即data version control, 是一种针对人工智能项目(机器学习或者深度学习)的数据版本管理工具。DVC的操作和GIT类似,可以认为为GIT的二次开发封装。结合GIT,DVC可以有效的管理人工智能项目的整个流程,包括代码,数据,训练配置,模型【2月更文挑战第12天】
78592 1
|
9月前
|
人工智能 机器人 API
小学生泪目Agent开发古诗助手
本文介绍了如何开发一个帮助小学生背古诗的AI Agent。通过阿里云的百炼大模型平台和千问,实现从需求规划、环境准备到开发与测试的全过程。该Agent不仅能根据主题找古诗、提供作者介绍和练习题,还能生成符合诗意境的图片,使学习更有趣。此外,还展示了如何通过无代码方式在百炼平台上构建智能体应用,简化开发流程。希望这能为学习AI Agent开发提供有益参考。
202 19
|
Oracle Java 关系型数据库
在 macOS 上安装 JDK 17
在 macOS 上安装 JDK JDK 支持基于 Intel (x64) 和 Apple Silicon (AArch64) 的 Mac 电脑。 本主题包括以下部分: 在 macOS 上安装 JDK 的系统要求 macOS JDK 安装说明符号 确定 macOS 上的默认 JDK 版本 在 macOS 上安装 JDK 在 macOS 上卸载 JDK macOS 安装常见问题
8790 0
|
小程序
TDesign电商小程序模板解析01-自定义底部导航栏(二)
TDesign电商小程序模板解析01-自定义底部导航栏(二)
|
7月前
|
开发框架 .NET 中间件
.net8 使用 license 证书授权案例解析
本文介绍了如何使用 `.NET CLI` 创建并改造一个 `ASP.NET Core Web API` 项目,以实现基于许可证的授权机制。具体步骤包括创建项目、添加必要的 NuGet 包(如 `Standard.Licensing` 和 `Swashbuckle.AspNetCore`),以及修改 `Program.cs` 文件以集成自定义的许可证验证中间件。项目结构中新增了 `LicenseController` 接口用于处理授权相关操作,并通过测试流程验证了默认天气接口在未授权和授权状态下的响应情况。整个过程确保了应用程序能够在启动时正确验证许可证,保障系统的安全性与可控性。
339 9
.net8 使用 license 证书授权案例解析
|
Prometheus 监控 Cloud Native
Spring Boot 性能护航!Prometheus、Grafana、ELK 组合拳,点燃数字化时代应用稳定之火
【8月更文挑战第29天】在现代软件开发中,保证应用性能与稳定至关重要。Spring Boot 作为流行的 Java 框架,结合 Prometheus、Grafana 和 ELK 可显著提升监控与分析能力。Prometheus 负责收集时间序列数据,Grafana 将数据可视化,而 ELK (Elasticsearch、Logstash、Kibana)则管理并分析应用日志。通过具体实例演示了如何在 Spring Boot 应用中集成这些工具:配置 Prometheus 获取度量信息、Grafana 显示结果及 ELK 分析日志,从而帮助开发者快速定位问题,确保应用稳定高效运行。
462 1
|
API
Calendar常用API
Calendar常用API
213 1
|
存储 网络协议 机器人
车载以太网权威指南阅读笔记
车载以太网权威指南阅读笔记