美文网首页呆鸟的Python数据分析
《爱上潘大师》系列-与Series的初次相见

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

作者: 小一不二三 | 来源:发表于2020-03-13 15:30 被阅读0次

    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的初次相见

    相关文章

      网友评论

        本文标题:《爱上潘大师》系列-与Series的初次相见

        本文链接:https://www.haomeiwen.com/subject/ptklshtx.html