小白学 Python 数据分析(3):Pandas (二)数据结构 Series
在家为国家做贡献太无聊,不如跟我一起学点 Python
顺便问一下,你们都喜欢什么什么样的文章封面图,老用这一张感觉有点丑
人生苦短,我用 Python
前文传送门:
小白学 Python 数据分析(1):数据分析基础
小白学 Python 数据分析(2):Pandas (一)概述
引言
先介绍下 Pandas 的数据结构,毕竟数据结构是万物的基础。
Pandas 有两种主要的数据结构: Series 和 DataFrame ,本文就先介绍第一种 Series 。
模块导入
首先我们在代码中引入 Pandas 和 Numpy ,如下:
import numpy as np
import pandas as pd
Series
Series 可以简单的理解为一维数组,可以存储整数、浮点数、字符串、Python 对象等类型的数据。
这个概念有点像 Java 中的集合。
如果无法理解的话,那么可以看下面这个图(Excel 简单画画,灵魂画手登场):
这里的 data 可以是上面提到的那些数据类型,并不仅限于图中的整数。
如果 index 的值未指定,那么将会自动的创建数值类型的索引,从 0 开始,例如:0 , 1 , 2, 3 … len(data) - 1 。
创建一个 Series ,这里我们可以使用 pd.Series 函数来创建,如下:
s = pd.Series(np.random.rand(5), index=['a', 'b', 'c', 'd', 'e'])
print(s)
print(s.index)s1 = pd.Series(np.random.randn(5))
print(s1)
结果如下:
a 0.218164
b 0.153201
c 0.572437
d 0.142784
e 0.710664
dtype: float64
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
0 0.255452
1 1.354357
2 2.092490
3 0.353899
4 1.692989
dtype: float64
从上面我们可以看到,如果我们手动指定了索引,那么将会按照我们指定的索引进行创建,如果没有指定会直接使用数值索引。
注意: 如果我们手动指定索引,索引的长度必须与数据的长度一致。如果不一致,将会抛出 ValueError 的异常,如下:
s = pd.Series(np.random.rand(6), index=['a', 'b', 'c', 'd', 'e'])
异常部分内容:
ValueError: Length of passed values is 6, index implies 5
字典实例化
Series 是可以使用字典进行实例化的,示例如下:
d = {'b': 1, 'a': 0, 'c': 2}
s2 = pd.Series(d)
print(s2)
结果如下:
b 1
a 0
c 2
dtype: int64
注意: 当我们使用的 data 为字典的时候,且未设置 index 参数时,如果 Python 版本 >= 3.6 且 Pandas 版本 >= 0.23, Series 按字典的插入顺序排序索引。Python < 3.6 或 Pandas < 0.23,且未设置 index 参数时, Series 按字母顺序排序字典的键(key)列表。
在上面的这个示例中,如果当前的环境 Python < 3.6 或 Pandas < 0.23, Series 将会按照字母的顺序进行排序,而不是当前字典的顺序,输出的结果将会是 ['a', 'b', 'c']
。
同时,如果我们在使用字典做 data 的时候,同样可以设置索引,这样将会按照索引来提取 data 中对应的值,如果索引在 data 中无对应,将会使用 NaN 来表示缺失的数据,示例如下:
s3 = pd.Series(d, index=['b', 'c', 'd', 'a'])
print(s3)
结果如下:
b 1.0
c 2.0
d NaN
a 0.0
dtype: float64
标量值实例化
data 还支持标量值进行实例化,当 data 是标量值的时候,实例化 Series 的时候必须提供索引, Series 将会按照索引的长度重复这个标量值,如下:
s4 = pd.Series(5., index=['a', 'b', 'c', 'd', 'e'])
print(s4)
结果如下:
a 5.0
b 5.0
c 5.0
d 5.0
e 5.0
dtype: float64
基于索引的操作方式
print(s[0])
print(s[:3])
print(s[s > s.median()])
print(s[[4, 3, 1]])
结果如下:
0.481205137399224a 0.481205
b 0.045604
c 0.108321
dtype: float64d 0.495208
e 0.817171
dtype: float64e 0.817171
d 0.495208
b 0.045604
dtype: float64
同时, Series 还支持通过索引标签进行设置值或者是取值,如下:
print(s['a'])
s['e'] = 12.
print(s)
结果如下:
0.481205137399224a 0.481205
b 0.045604
c 0.108321
d 0.495208
e 12.000000
dtype: float64
如果直接使用 Series 中没有的索引标签,会抛出 KeyError 异常:
# 抛出 KeyError 异常
# print(s['f'])
我们可以通过 in
来判断当前的 Series 中有没有含有索引标签,如下:
print('e' in s)
print('f' in s)
结果如下:
True
False
可以通过 get 这个方法获取 Series 没有的索引标签,同时可以设置返回的默认值:
print(s.get('f'))
print(s.get('f', np.nan))
结果如下:
None
nan
常用方法
# 打印 e 的幂次方, e 是一个常数为 2.71828
print (np.exp(s))
# 打印 s 里每个元素的开方
print (np.sqrt(s))
print(s.dtype)
print(s.array)
print(s.to_numpy())
结果如下:
a 1.618023
b 1.046659
c 1.114406
d 1.640840
e 2.264085
dtype: float64a 0.693690
b 0.213550
c 0.329122
d 0.703711
e 0.903975
dtype: float64float64<PandasArray>
[ 0.481205137399224, 0.04560362121419126, 0.10832121726528887,0.49520848929233285, 0.8171705710254773]
Length: 5, dtype: float64[0.48120514 0.04560362 0.10832122 0.49520849 0.81717057]
从上面的示例中可以看到,当使用 Series 做一些算数运算的时候,是不需要循环 Series 中每个值的。
注意: Series 之间的操作会自动基于标签对齐数据。
print(s[1:] + s[:-1])
结果如下:
a NaN
b 0.091207
c 0.216642
d 0.990417
e NaN
dtype: float64
操作未对齐索引的 Series, 其计算结果是所有涉及索引的并集。如果在 Series 里找不到标签,运算结果标记为 NaN
,即缺失值。
名称属性
Series 支持 name
属性,我们可以给我们自己定义的 Series 起一个自己喜欢的名字:
s5 = pd.Series(np.random.randn(5), name='my_series')
print(s5)
print(s5.name)
print(id(s5))
结果如下:
0 0.491450
1 0.939965
2 0.868437
3 -0.099575
4 1.866875
Name: my_series, dtype: float64my_series1492397351368
这里小编顺手使用 id 方法打印一下 s5 的内存地址。
同样, Series 为我们提供了重命名的方法 rename()
:
# 重命名 series
s6 = s5.rename("my_series_different")
print(id(s6))
结果如下:
1492397351368
0 0.491450
1 0.939965
2 0.868437
3 -0.099575
4 1.866875
Name: my_series_different, dtype: float641492400065800
对比上下两个 s5 和 s6 可以看到,这两个 Series 具有相同的 data 内容, name 属性并不相同。
但是,有一点要注意的是: s5 和 s6 是两个不同的对象,这里打印的内存地址不同也说明了这一点,这里实际上并不是将 s5 的 name 修改了一下,而是新建了一个新的对象并使用了新的 name 属性。
示例代码
老规矩,所有的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便大家取用。
示例代码-Github
示例代码-Gitee
参考
https://www.pypandas.cn/docs/getting_started/dsintro.html
您的扫码关注,是对小编坚持原创的最大鼓励:)
小白学 Python 数据分析(3):Pandas (二)数据结构 Series相关推荐
- matplotlib plot 分组_小白学 Python 数据分析(16):Matplotlib(一)坐标系
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 跟小白学Python数据分析——绘制仪表盘
本文继续采用PyEcharts v1.x版本进行绘制仪表盘. 注:PyEcharts分为 v0.5.x 和 v1.x 两个大版本,v0.5.x 和 v1.x 间不兼容,v0.5.x是基于Python2 ...
- 跟小白学Python数据分析——绘制水球图
本文继续采用PyEcharts v1.x版本进行绘制水球图. 注:PyEcharts分为 v0.5.x 和 v1.x 两个大版本,v0.5.x 和 v1.x 间不兼容,v0.5.x是基于Python2 ...
- python中for循环缩进_跟小白学Python数据分析——For循环
原标题:跟小白学Python数据分析--For循环 循环是指反复地连续做某件事,例如地球绕地轴自转一圈就是一天,自转的同时绕太阳公转一圈就是一年.周而复始,转了一圈又一圈,一次又一次地循环. 在编程过 ...
- 小白学 Python 数据分析(1):数据分析基础
各位同学好,小编接下来为大家分享一些有关 Python 数据分析方面的内容,希望大家能够喜欢. 人工植入广告: PS:小编最近两天偷了点懒,好久没有发原创了,最近是在 CSDN 开通了一个付费专栏,用 ...
- pandas 排序 给excel_懂Excel轻松入门Python数据分析包pandas(二十五):循环序列分组...
此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 ...
- pandas 更改单元格的值_懂Excel轻松入门Python数据分析包pandas(二十四):连续区域...
此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 ...
- 可自定义匹配规则查找控件_懂Excel轻松入门Python数据分析包pandas(二十八):二分法查找...
此系列文章收录在公众号中:数据大宇宙 > 数据处理 > E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 ...
- python怎么筛选excel数据_懂Excel也能轻松入门Python数据分析包pandas(二):高级筛选(上)-excel筛选...
转发本文并私信我"python",即可获得Python资料以及各种心得(持续更新的) 系列文章: 前言 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理 ...
最新文章
- 组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
- ubuntu/debian 安装SSH,并开启
- 小程序读取富文本mysql存储_微信小程序API 富文本·EditorContext实例
- c语言把文件导入链表,【求解答】c关于把文件数据放进链表,并将链表遍历
- 吴教主深度学习和神经网络课程总纲
- mysql的日志迁移到mango_mysql 向mongo迁移备忘
- Winform使用DevExpress的WaitDialogForm画面 z
- 在Java中如何从一个多层嵌套循环中直接跳出?
- 如今前端程序员还有前途吗?
- lion.ec开源框架简介(原创)
- 智能优化算法论文python复现,附代码--鲸鱼优化算法(WOA)-1
- 智能硬件设计开发流程
- 关于地统计的一些知识点
- 平行四边形(几何)题解
- 【开源编码分享】Python古三式∶太乙神数丶奇门遁甲丶大六壬
- 如何修复Android手机上无响应的触摸屏
- 计量经济学复习笔记(六)updated
- 初识C语言之详解char类型
- Morto蠕虫病毒分析报告
- 绩效考核OKR怎么做?
热门文章
- 行测-判断推理-图形推理-样式规律-数量规律-面数量
- ENVI下植被覆盖度的遥感估算
- talib.MOM动量(Momentum)指标MTM、MAMTM
- Php+Xls通用模糊搜索系统(IM1X2018) 免费下载
- 2023年微单相机市场电商数据分析(京东数据查询分析)
- Multisim6.5
- 设计师:设计师知识储备之设计流派(高技派、光亮派、白色派、风格派、极简主义、装饰艺术、后现代、解构主义、新现代主义 )之详细攻略
- 044-赛灵思-0FPGA-简单实用
- 联想服务器引导盘制作工具,制作支持UEFI引导的U盘在System x服务器上安装Windows Server 2008 R2操作系统...
- [转载] Linux网桥浅析