• pandas学习以及matplotlib绘图


    pandas学习

    一.简介pandas是一个强大的python数据分析的工具包,它是基于Numpy构建的,正因为pandas的出现,让python语言也成为使用最广泛且强大的数据分析环境之一

    Pandas的主要功能:1.具备对其功能的数据结构DataFrame,Series2.集成时间序列功能3.提供丰富的数学运算和操作4.灵活处理确实数据

    安装方法:pip install pandas引用方法:import pandas as pd

     import pandas as pd;`

    import numpy as np;
    arr1 = np.array([1,2,3,4,5])
    arr2 = np.array([5,4,3,2,1])
    print(arr1*arr2)

    [5 8 9 8 5]

    二.SeriesSeries是一种类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成.有点类似于python中的字典1.创建方法

    ## 第一种创建方法 
    s1 = pd.Series([1,2,3,4])

    print(s1)
    0   1
    1   2
    2   3
    3   4
    dtype: int64

    print(s1[1])
    2

    将数组缩影以及数组的值打印出来,索引在左,值在右,由于没有为数据制定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引,取值的时候可以通过索引取值,跟之前学过的数组和列表一样


    ## 第二种
    s2 = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

    print(s2)
    print(s2['a'])

    a   1
    b   2
    c   3
    d   4
    e   5
    dtype: int64
    1

    ## 自定义索引,Index是一个索引列表,里面包含的是字符串,依然可以通过默认索引取值
    print(s2[1])

    2
    ### 第三种
    s3 = pd.Series({"a":1,"b":2})
    print(s3)
    print(s3["a"])
    ## 指定索引

    a   1
    b   2
    dtype: int64
    1

     ### 第四种  

    s4 = pd.Series(0,index = ['a','b','c'])
    print(s4)

    a   0
    b   0
    c   0
    dtype: int64

    对于Series,其实我们可以认为它是一个长度固定且有序的字典,因为它的索引和数据是按照位置进行匹配的,类似于字典的key-value 形式

    Series 确实数据1.dropna() 过滤掉值为NaN的行2.fill() 填充确实数据3.isnull() 返回bool数组,缺失值为true4.notnull() 返回bool数组,缺失值对应为false

     ### 第一步.创建一个字典,通过series方式创建一个Series对象

    st = {"age":18,"name":"szp","gender":"male"}

    obj = pd.Series(st)
    print(obj)
    print(obj['name'])

    age         18
    name       szp
    gender   male
    dtype: object
    szp

    ### 第二步. 第一一个索引变量
    a = {"age","name","gender","address"}
    ### 第三步  
    obj1 = pd.Series(st,index = a)
    print(obj1)  ## 将第二步定义的a变量座位索引传入

    打印的结果:
    gender     male
    address     NaN
    age          18
    name        szp
    dtype: object

    gender     male
    address     NaN
    age         18
    name       szp
    dtype: object

    ## 因为 address没有出现在st的键中,所以返回的是缺失值

    ## 通过上面的代码演示,对于缺失值已经有了一个简单的了解,接下来就看看如何判断
    ## 缺失值

    print(obj1) ## 先把这个兑现打印出来看看

    gender     male
    address     NaN
    age          18
    name        szp
    dtype: object

    gender     male
    address     NaN
    age         18
    name       szp
    dtype: object

     obj1.isnull()  ## 是缺失值返回true

    ## 运行结果
    gender     False
    address     True
    age        False
    name       False
    dtype: bool

    gender     False
    address     True
    age       False
    name       False
    dtype: bool

    obj1.notnull()  ### 是缺失值返回true
    ## 运行结果
    gender      True
    address    False
    age         True
    name        True
    dtype: bool

    gender     True
    address   False
    age         True
    name       True
    dtype: bool

    ## 过滤缺失值,布尔型索引
    obj1[obj1.notnull()]
    ## 运行结果 将是Null的,缺失的数据剔除掉
    gender    male
    age         18
    name       szp
    dtype: object

     

    gender    male
    age         18
    name       szp
    dtype: object
    

     

    Series 特性1.从ndarray 创建Series:Series(arr)2.与标量(数字)运算; sr * 2 3.两个Series 运算4.通用函数: np.ads(sr)5.布尔值过滤 sr[sr>0]6.统计函数 mean() sum() cunsum()

    支持字典的特性: 1.从字典创建Series:Series(dic) 2.in 运算 成员运算 'a' in sr, for x in sr 3.键索引 4.键切片 print(obj1)

        gender     male
        address     NaN
        age          18
        name        szp
        dtype: object
    
        print(obj1["gender":"age"])
    
        gender     male
        address     NaN
        age          18
        dtype: object
       
    5.其他函数:get("a",default = 0)等
    

     ## 整数索引
    ## 接下来通过代码来演示pandas中的整数索引

    sr = pd.Series(np.arange(10))
    sr1 = sr[3:].copy()
    print(sr1)
    3    3
    4    4
    5    5
    6    6
    7    7
    8    8
    9    9
    dtype: int32
    ### 到这里会发现一切正常,一点问题都没有,可是当使用整数索引取值的时候就会发现出现问题了
    ### 因为在pandas 当中使用整数索引取值是有限以标签解释的,而不是下标
    3    3
    4    4
    5    5
    6    6
    7    7
    8    8
    9    9
    dtype: int32
    

     


    print(sr1[3])  ## 这个不会出错,优先下标,打印出来的是3对应的3,而不是第4个
    #   print(sr1[1]) ### 但是这个会报错,因为sr1中没有一个1的Key

    3
    

    解决方法

    loc属性 ## 以标签解释iloc 属性 ## 以下标解释

     


    print(sr1.iloc[0])  ### 以下标解释
    print(sr1.loc[3] )  ## 以标签解释
    ## 这两个输出结果都是一样的,都是3
       
    3
    3
    

    Series 数据对齐

    pandas 在运算时,会按索引进行对齐,然后再进行计算,如果存在不同的索引,则结果的索引是连个操作数索引的并集

     


    sr1 = pd.Series([12,23,34],index = ["c","a","d"])
    sr2 = pd.Series([11,20,10],index = ['d','c','a'])
    sr1+sr2

    运行结果
    a    33
    c    32
    d    45
    dtype: int64
       ## 可以通过这种索引对齐直接将两个Series对象进行运算
       

     

    a    33
    c    32
    d    45
    dtype: int64
    

    sr3 = pd.Series([11,20,10,14],index = ['d','c','a','b'])
    sr1 + sr3

    ## 运行结果
    a    33.0
    b     NaN
    c    32.0
    d    45.0
    dtype: float64
       ## sr1 和sr3的索引不一致,所以最终的运行会发现b缩影对应的值无法运算,就返回了
       ## NaN,一个缺失值
    a    33.0
    b     NaN
    c    32.0
    d    45.0
    dtype: float64
    

     ## 将两个Series 对象相加时将缺失值设为 0

    sr1 = pd.Series([12,23,34],index = ['a','b','c'])
    sr3 = pd.Series([11,20,10,14],index = ['a','b','c','d'])
    sr1.add(sr3,fill_value = 0)

    运行结果:
    a    23.0
    b    43.0
    c    44.0
    d    14.0
    dtype: float64
    ## 将缺失值设为 0 ,所以最后算出来d索引对应的值是14

    a    23.0
    
    b    43.0
    c    44.0
    d    14.0
    dtype: float64
    

      ### 还有一些灵活的算术方法,add sub div mul 这里不一一介绍

    DataFrame

    DataFrame是一个表格型的数据结构,相当于是一个二维数组,含有一组有序的列,它可以被看做是由Series组成的字典,并且共用一个索引

    创建方式:创建一个DataFrame数组可以有多种方式,其中最常用的方式就是利用包含等长度列表或者numpy数组的字典来形成DataFrame:


    ## 第一种
    pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
    ## 产生的DataFrame 会自动为Series 分配索引,并且列会按照排序的顺序排列

    ## 运行结果
      one two
    0 1 4
    1 2 3
    2 3 2
    3 4 1

    <div><style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }

    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }
    

    </style><table border="1" class="dataframe"> <thead> <tr > <th></th> <th>one</th> <th>two</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>1</td> <td>4</td> </tr> <tr> <th>1</th> <td>2</td> <td>3</td> </tr> <tr> <th>2</th> <td>3</td> <td>2</td> </tr> <tr> <th>3</th> <td>4</td> <td>1</td> </tr> </tbody></table></div>

     


    ## 指定列
    ## 可以通过columns 参数指定顺序排列

    data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
    pd.DataFrame(data,columns=['one','two'])

    运行结果
      one two
    0 1 4
    1 2 3
    2 3 2
    3 4 1
    ## 打印结果会按照columns参数指定顺序

     

    <div><style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }

    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }
    

    </style><table border="1" class="dataframe"> <thead> <tr > <th></th> <th>one</th> <th>two</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>1</td> <td>4</td> </tr> <tr> <th>1</th> <td>2</td> <td>3</td> </tr> <tr> <th>2</th> <td>3</td> <td>2</td> </tr> <tr> <th>3</th> <td>4</td> <td>1</td> </tr> </tbody></table></div>

     


    ## 第二种
    pd.DataFrame({'one':pd.Series([1,2,3,4],index=['a','b','c','d']),
                 'two':pd.Series([6,7,8,9],index=['d','c','b','a'])})

    ##运行结果
      one two
    a 1 9
    b 2 8
    c 3 7
    d 4 6

     

    <div><style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }

    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }
    

    </style><table border="1" class="dataframe"> <thead> <tr > <th></th> <th>one</th> <th>two</th> </tr> </thead> <tbody> <tr> <th>a</th> <td>1</td> <td>9</td> </tr> <tr> <th>b</th> <td>2</td> <td>8</td> </tr> <tr> <th>c</th> <td>3</td> <td>7</td> </tr> <tr> <th>d</th> <td>4</td> <td>6</td> </tr> </tbody></table></div>

     

    以上创建方式简单了解就可以,因为在实际应用中更多是读书节,不需要自己手动创建

    查看数据常用属性和方法:index 获取行索引columns 获取列索引T: 转置values 获取值索引describe 获取快速统计

     

    索引和切片

    方法1: 两个中括号,先取列,再取行 df'A'方法2:(推荐) 使用loc/ iloc 属性,一个中括号,逗号隔开,先去行再取列, loc属性:解释为标签 iloc属性:解释为下标向DataFrame对象中写入值时只使用方法2列/行索引部分可以是常规索引,切片,布尔值索引,花式索引任意搭配,注意:两部分都是花式索引是结果可能和预料的不同

     

    4.时间对象处理

    时间序列类型时间戳:特定时刻固定时期:如2019年1月时间间隔:起始时间-结束时间

    python库:datatimedate,time,datetime,timedelta

    dt.strftime()strptime()灵活处理时间对象,dateutil包dateutil.parser.parse()

    import time print(time.time)print(time.strftime())

     

    5 数据分组和聚合

    在数据分析当中,我们有时需要将数据拆分,然后再每一个特定的组里进行运算,这些操作通常也是数据分析工作中的重要环节5.1 分组 GroupBY机制

    pandas对象,无论是Series,DataFrame还是其他什么的,当中的数据会根据提供的一个或者多个键被拆分为多组,拆分操作是在对象的特定轴上执行的,就比如DataFrame可以在他的行上或者列上进行分组,然后将一个函数应用到各个分组上并产生一个新的值,最后将所有的执行结果合并到最终的结果对象中

    分组键的形式:列表或者数组,长度与待分组的轴一样表示DataFrame某个列名的值字典或者Series,给出待分组轴上的值或与分组名之间的对应关系函数,用于处理轴索引或者索引中国的各个标签码

    具体介绍可以见:https://www.cnblogs.com/xiaoyuanqujing/articles/11646477.html

     

    读取excel 表格或者CSV文件数据

    https://www.cnblogs.com/happymeng/p/10481293.html

     可以在jupyter notebook 中直接直接操作excel文件,做数据的分析工作,具体的介绍方法在可以看上面的那个链接
    也可以直接去博客园搜索相关的pandas 操作excel文件的案例

    matplolib

    这个模块是用来画图的,可以将一些数据画成各种图形,还可以绘制三维图

    但是我们一般用Echarts绘图.这个绘制的图像更加的美观,

     https://www.echartsjs.com/examples/zh/index.html#chart-type-globe

    还有highcharts

    https://www.highcharts.com.cn/demo/highmaps

    这两个生成的图片会更加的美观,而且简单

  • 相关阅读:
    创建百度地图实例
    IntelliJ IDEA使用(1)——IDEA配置JDK
    IntelliJ IDEA使用(2)——IDEA配置Tomcat
    怎样使用 GitHub?
    IntelliJ IDEA使用(3)——IDEA连接Git
    AS3.0杂记——Dictionary、Object与Array
    AIR文件操作:使用文件对象操作文件和目录 .
    As3.0 TextField
    关于乘机
    Html 嵌入 swf
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/11938821.html
Copyright © 2020-2023  润新知