欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《爱上潘大师》系列-与Series的初次相见

程序员文章站 2022-05-16 14:50:03
...

《爱上潘大师》系列-与Series的初次相见

2020,努力做一个无可替代的人!



写在前面的话

如果你是因为标题点进来的,那我得先解释一下

小一我可不是渣男,怎么会爱上别的人呢

Pandas,江湖人称“潘大师”,一手数据分析的技能让江湖人士爱慕不已。

当然,小一我也是潘大师的忠实粉丝,在MB级别的数据处理中也全靠潘大师才能够苟活到现在。

《爱上潘大师》系列,是Python 高阶部分的第二个系列

上一个系列也说过,NumPy 是Pandas 的基础,如果Pandas 有些问题你不是很理解,就去上一个系列看看基础,想必会对你有所帮助

上一个系列我根据文章主要内容重新列了标题

不要问我为什么重新列标题,我的眼眶好像又湿了…

NumPy 系列四篇文章,打好基础,再去研究Pandas 就会容易很多:

推荐看完《Hello NumPy》系列再来开荒 《Pandas 系列》


正文

Pandas,数据分析的重点库,基于NumPy构建,包含数据分析的高级数据结构和操作工具。

上面三个介绍应该很能说明问题,如果说NumPy 是一块生铁,那Pandas 就是一把生铁打造的利刃。

了解Pandas ,就得先了解它的数据结构。

不同于NumPy 的多维数组,Pandas 的主要数据结构是Series和DataFrame。

Series是一种类似于一维数组的对象,而DataFrame是一个表格型的数据结构,今天就主要介绍一下Series 相关。


Series 到底是什么样的?

Series 由一组数据以及一组与之相关的数据标签组成,其中数据可以是NumPy类型的各种数据,数据标签我们称之为索引。

说这么些,还不如直接举个例子,包你一眼就看明白

import pandas as pd
# 创建 Series
series_data1 = pd.Series([1, 2, 4, 5])

# 输出
0    1
1    2
2    4
3    5
dtype: int64

Series 是Pandas 的一种数据结构,所有我们可以直接通过 pd. 调用它

上面例子中,通过一维数组创建一个Series 数据,其中索引在左边,值在右边。

即左边的【0、1、2、3】是数据的索引,右边的【1、2、4、5】是数据值。

虽然我们没有为数据指定索引,但是Series 会自动创建一个0到N-1的整数型索引。


带索引的数据Series 数据如何创建?

知道你也有这个疑问,一起看一下吧

在创建的数据的时候,我们需要手动声明索引

# 创建带索引的数据
series_data2 = pd.Series([1, 2, 4, 5], index=['a', 'b', 'c', 'd'])

# 输出
a    1
b    2
c    4
d    5
dtype: int64

这就是Series 创建的方法,是不是很简单?


就这两种创建方式吗?NumPy 可是有好多种

有的有的,还可以通过字典创建 Series

# 通过字典创建Series
dict_data = {'a':1, 'b':2, 'c':4, 'd':5}
series_data3 = pd.Series(dict_data)

# 输出
a    1
b    2
c    4
d    5
dtype: int64

也可以通过字典和索引结合的方式创建 Series

这个时候,就以索引对应的数据为主了:索引能对应上数据,则数据存在,否则,数据为NaN

# 根据索引对应取值
index_data = ['a', 'b', 'c', 'new']
series_data4 = pd.Series(dict_data, index=index_data)

# 输出
a      1.0
b      2.0
c      4.0
new    NaN
dtype: float64

Series 的创建就这几种,一般创建 Series用到的不多,了解了解


Series 数据创建好了,访问的时候需要注意什么吗?

首先既然我们要访问数据,得先知道都有哪些访问方式

比如我们需要知道所有的值和索引,可以这样写

# 获取数据值
series_data2.values
# 输出
[1 2 4 5]

# 获取索引对象
series_data2.index
# 输出
Index(['a', 'b', 'c', 'd'], dtype='object')

既然可以访问索引,那索引可以修改吗?

对不起,不可以。

Index 对象不能更改,但是可以通过赋值索引实现这个目的

# 赋值索引
series_data2.index = ['new_a', 'new_b', 'new_c', 'new_d']
# 输出
Index(['new_a', 'new_b', 'new_c', 'new_d'], dtype='object')

至于说Series 的reindex 方法,先卖个关子,下节会说


通过下标去访问

例如我们需要查看第三个数据值以及对应的索引

# 查看第三个数据值
series_data2[2]
# 输出
4

# 查看第三个数据值对应的索引
series_data2.index[2]
# 输出
new_c

了解了,还有其他访问方式吗?

如果我们知道索引,当然也可以通过索引访问数据

# 通过索引访问数据
series_data2['new_c']
# 输出
4

# 通过多个索引访问数据
series_data2[['new_a', 'new_b', 'new_c']]
# 输出
new_a    1
new_b    2
new_c    4
dtype: int64

了解了访问方式,回想一下NumPy,Series之间可以进行相应的计算吗?

答案是肯定的。


先来看看 Series 的逻辑运算

# 输出大于2的Series 数据
series_data2[series_data2>2]

# 输出
new_c    4
new_d    5
dtype: int64

# c是否在索引中
'c' in series_data2
# 输出(因为已经改成 new_c了,所以是False)
False

在进行 in 运算时,可以将 Series看作是一个字典数据类型,索引和值是一一对应的。


再来看看 Series 的算术运算

举个例子:平方运算和开方运算

series_data2**2
# 输出
new_a     1
new_b     4
new_c    16
new_d    25
dtype: int64

np.sqrt(series_data2)
# 输出
new_a    1.000000
new_b    1.414214
new_c    2.000000
new_d    2.236068
dtype: float64

Series 还有一个最重要的功能:自动对齐

Series 会自动对齐不同索引的数据,特别是在算术运算符中

看个例子:不同索引的两个Series 数据相加

# 创建不同索引的两个Series
series_a = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
series_b = pd.Series([2, 2, 2], index=['b', 'c', 'd'])

# 输出
a    1
b    2
c    3
dtype: int64
b    2
c    2
d    2
dtype: int64
    
# 相加
series_a + series_b
# 输出
a    NaN
b    4.0
c    5.0
d    NaN
dtype: float64

Series 会根据索引自动对齐数据,上面例子中两个Series 自动对齐 b、c 索引的数据 ,若无法对齐则会置为缺失数据

NaN:not a number 非数字


总结一下:

今天主要介绍了Pandas 的部分背景和Series 相关操作。

可能也不是很会写那种概念文,所以背景也就一两句话略过,大家就权当我说了很多,记住一点:NumPy 是基础,Pandas 是利器。

文中主要介绍了Series 的相关操作,稍微总结一下:

  1. Series 的创建方法
  2. Series 的访问操作
  3. Series 的相关运算

今天文章内容就这些,有问题欢迎留言,下节见

写在后面的话

如果说你错过了上个系列,那你一定不能错过这个系列

数据分析干货也不多,这个系列完了可能就会开始实战了

没跟上的同学自己加快进度,跟上的同学记得关注我,下节内容就不会错过了。

碎碎念一下

新的系列,小一我一直在努力,你们也要加油

感谢每篇文章帮我点赞的你


原创不易,欢迎点赞噢

文章首发:公众号【知秋小一】

文章同步:掘金,简书,csdn


原文链接:《爱上潘大师》系列-与Series的初次相见


相关标签: Python 数据分析