美文网首页我爱编程
2018-04-07-不会统计学的Pandas入门(一)

2018-04-07-不会统计学的Pandas入门(一)

作者: 0xC00005 | 来源:发表于2018-04-09 07:10 被阅读0次

    前言

    不做笔记我就贼难受,算了算了还是写一下吧,

    又是一个没有学过统计学出来招摇撞骗的噗嗤,学pandas明明是为了DataFrame结果你告诉我你连Excel表格都不会用【迫真

    文章素材来自莫烦大大,莫烦大大好像也是看了Gitbook的,so.....
    我的思路是绝对不会受到影响的我路子那么野qwq

    Okay,there we GGGO!

    0x01pandas到底是什么

    Excel表格懂吧,把他当做一种数据结构,就是pandas了【精不精辟?】

    pandas适合于许多不同类型的数据,包括:

    • 具有异构类型列的表格数据,例如SQL表格或Excel数据
      有序和无序(不一定是固定频率)时间序列数据。
    • 具有行列标签的任意矩阵数据(均匀类型或不同类型)
    • 任何其他形式的观测/统计数据集。

    我们主要用到的就是pandas里面两个类型:Series和DataFrance
    这里要说一下英文的拼写问题,当你要定义这两个类型的时候.....
    记得大写字母
    记得大写字母
    记得大写字母
    重要的事情说三遍都不算多

    还有一个事情:
    不要tmd把Series(串联)拼成Serious或者Serise(严肃的,还有一个是我经常拼写错的,习惯性以为se在后面)

    附:pip安装pandas【用Anaconda从来没有安装过包的笑嘻嘻】

    pip3 install pandas
    

    0x02 Series串联

    想一想串联在数学上的意义是什么......就是一个一维数组嘛
    唯一与array不同的一点是:串联可以自定义标签,或者另外一个词叫‘数组下标’

    >>> import numpy as np
    >>> import pandas as pd
    #定义方法
    >>> array1 = np.array([1,2,3,4])
    >>> series1 = pd.Series([1,2,3,4])  #注意这里要大写
    >>> array1
    array([1, 2, 3, 4])
    >>> series1
    0    1
    1    2
    2    3
    3    4
    dtype: int64
    #下标访问
    >>> array1[1]
    2
    >>> series1[1]
    2
    

    那么我刚刚说的骚操作更改下标是什么呢,我们可以尝试一下使用values和index属性来查看一下【我我我真的只是尝试】

    >>> series1.values
    array([1, 2, 3, 4], dtype=int64)
    >>> series1.index
    RangeIndex(start=0, stop=4, step=1)
    

    既然有这个属性,那么我们就肯定可以自定义!【确信】

    自定义方法不难推测,根据上面.index里面返回的值发现,其实里面放了一个range来生成数组下表,尝试一下修改srart起始数使得下表从1开始
    好吧其实不行,因为index里面必须要填入一个列表来着

    #着算一个伪方法吧,唯一美中不足的地方就是需要提前定义values列表然后取len值
    >>> series1 = pd.Series([1,2,3,4],index=(list(range(1,5))))
    >>> series1
    1    1
    2    2
    3    3
    4    4
    dtype: int64
    #数组下标访问测试
    >>> series1[1]
    1
    

    nice!
    接下来进行一些骚操作,比如把下标换成英文字母

    >>> series1 = pd.Series([1,2,3,4],index=['A','B','C','D'])
    >>> series1
    A    1
    B    2
    C    3
    D    4
    dtype: int64
    >>> series1['A']
    1
    

    哇哦哦哦,然后呢
    恭喜你已经基本掌握了Series的基本用法qwq

    接下来是.....

    0x03 DataFrame数据表?

    好吧这个名字是我自己发明的辣【表示有道还有Bing都没有查到中文意思】
    其实用起来跟Excel差不多,只不过是你自己定义了一个二维或多维数组【难不成你会用表格存一维的数据吗那我要你这个表格有何用直接上Series不就行了】

    好的为了生成一个DataFrame你需要准备什么??

    • 一个已经reshape好的多维数组
    • 一个对应行的list
    • 一个对应列的list
    • 手和Python环境

    当然了你也没有一定要定义行标签和列标签【强迫症保护协会表示严重谴责】
    比如直接用一个reshape好的array生成一个DataFrame(注意大写字母)

    >>> array2=arange(16).reshape(4,4)
    >>> DataFrame1 =pd.DataFrame(array2)
    >>> DataFrame1
        0   1   2   3
    0   0   1   2   3
    1   4   5   6   7
    2   8   9  10  11
    3  12  13  14  15
    

    这里有的眼尖的同学已经发现了多了几个0,1,2,3,那些就是行标签和列标签
    我来尝试访问一下:

    >>> DataFrame1.columns
    RangeIndex(start=0, stop=4, step=1)
    >>> DataFrame1.index
    RangeIndex(start=0, stop=4, step=1)
    

    下面我们来自定义,定义方法和之前的Series一样的,都是直接写属性名=

    >>> DataFrame1 = pd.DataFrame(array2,
    columns=["column1", "column2", "column3", "column4"], 
    index=["a", "b", "c", "d"])
    >>> DataFrame1
       column1  column2  column3  column4
    a        0        1        2        3
    b        4        5        6        7
    c        8        9       10       11
    d       12       13       14       15
    

    如果用多维数组可以创建DataFrame,那么字典呢
    其实在DataFrame里面使用字典的好处就是可以自定义每一列的内容
    但是就不能判断行的内容辣

    >>> DataFrame2 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"],
    ...     "weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]})
    >>> DataFrame2
      note weekday
    0    C     Mon
    1    D     Tue
    2    E     Wed
    3    F     Thu
    4    G     Fri
    5    A     Sat
    6    B     Sun
    

    噗嗤,那么说了多维数组和字典,还有什么漏掉了.....
    Series??
    害怕了,我去试试,就用刚刚我上面定义的Series1

    >>> DataFrame3 = pd.DataFrame(series1)
    >>> DataFrame3
       0
    A  1
    B  2
    C  3
    D  4
    

    这里是一个Series,但是如果使用多个呢?会发现一个很有趣的现象:

    >>> noteSeries = pd.Series(["C", "D", "E", "F", "G", "A", "B"],
    ...     index=[1, 2, 3, 4, 5, 6, 7])
    >>> weekdaySeries = pd.Series(["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
    ...     index=[1, 2, 3, 4, 5, 6, 7])
    >>> df4 = pd.DataFrame([noteSeries, weekdaySeries])
    >>> df4
         1    2    3    4    5    6    7
    0    C    D    E    F    G    A    B
    1  Mon  Tue  Wed  Thu  Fri  Sat  Sun
    

    这里Series被作为行来添加了呢是不是很莫名其妙
    其实是因为这些Series没有被定义index,然后DataFrame要求绝对对齐,所以emmm

    如果把不同len的series放在一起很有可能会出现无效值:

    >>> df4 = pd.DataFrame([noteSeries, weekdaySeries,series1])
    >>> df4
         1    2    3    4    5    6    7    A    B    C    D
    0    C    D    E    F    G    A    B  NaN  NaN  NaN  NaN
    1  Mon  Tue  Wed  Thu  Fri  Sat  Sun  NaN  NaN  NaN  NaN
    2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  1.0  2.0  3.0  4.0
    

    这里DataFrame为了对齐就把很多的长度强行补齐,导致的就是很多的无效值影响阅读

    小标题1:如何删改DataFrame里面的值?

    你看Series都可以用数组下标访问,那么在Series里面不也是一样的嘛?

    >>> df3 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"],
    ...     "weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]})
    >>> df3
      note weekday
    0    C     Mon
    1    D     Tue
    2    E     Wed
    3    F     Thu
    4    G     Fri
    5    A     Sat
    6    B     Sun
    >>> df3["No."] = pd.Series([1, 2, 3, 4, 5, 6, 7])#添加列数据
    >>> df3
      note weekday  No.
    0    C     Mon    1
    1    D     Tue    2
    2    E     Wed    3
    3    F     Thu    4
    4    G     Fri    5
    5    A     Sat    6
    6    B     Sun    7
    >>> del df3["weekday"] #删除列数据
    >>> df3
      note  No.
    0    C    1
    1    D    2
    2    E    3
    3    F    4
    4    G    5
    5    A    6
    6    B    7
    

    小标题2:既然你可以删改数据那么怎么访问到我需要删改的数据呢?

    在DataFrame里面有两种访问数据的方法,其中一种是通过像二位数据一样的数组下标,还有一种是通过行和列的标签

    • loc:通过行和列的索引来访问数据
    • iloc:通过行和列的下标来访问数据

    我们在使用的时候只需要在列表的后面添加上对应的类型名(是loc还是iloc?)就可以实现访问和修改了

    >>> df3.loc[[0, 1], "note"]
    0    C
    1    D
    Name: note, dtype: object
    >>> df3.iloc[[0, 1], 0]
    0    C
    1    D
    Name: note, dtype: object
    '''
    第一行代码访问了行索引为0和1,列索引为“note”的元素。
    第二行代码访问了行下标为0和1
    对于df3来说,行索引和行下标刚好是一样的,所以这里都是0和1,但它们却是不同的含义
    '''
    

    最后

    好了,第一期的DataFrame用时一个周末完成了噗嗤
    接下来又是永无止境的填坑吧qwq,害怕了

    参考资料:
    Python数据处理库pandas入门教程
    Pandas 基本介绍
    Gitbook-Pandas 官方教程

    最后的最后

    这个小姐姐更新博客很勤的你真的人心不来看看嘛

    相关文章

      网友评论

        本文标题:2018-04-07-不会统计学的Pandas入门(一)

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