《爱上潘大师》系列-与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 的相关操作,稍微总结一下:
- Series 的创建方法
- Series 的访问操作
- Series 的相关运算
今天文章内容就这些,有问题欢迎留言,下节见
写在后面的话
如果说你错过了上个系列,那你一定不能错过这个系列
数据分析干货也不多,这个系列完了可能就会开始实战了
没跟上的同学自己加快进度,跟上的同学记得关注我,下节内容就不会错过了。
碎碎念一下
新的系列,小一我一直在努力,你们也要加油
感谢每篇文章帮我点赞的你
原创不易,欢迎点赞噢
文章首发:公众号【知秋小一】
文章同步:掘金,简书,csdn