zoukankan      html  css  js  c++  java
  • Pandas 的使用

    安装

       pip3 install pandas

    导入

      import pandas as pd  # 约定俗成 起别名为 pd

    Series

      Series 是一种类似于 一维数组的对象一组数据和一组与之相关的数据标签(索引)组成

      创建:

    第一种:
    pd.Series([4,5,6,7,8])
    执行结果:
    0    4
    1    5
    2    6
    3    7
    4    8
    dtype: int64
    # 将数组索引以及数组的值打印出来,索引在左,值在右,由于没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引,
    # 取值的时候可以通过索引取值,跟之前学过的数组和列表一样
    ----------------------------------------------- 第二种: pd.Series([4,5,6,7,8],index=['a','b','c','d','e']) 执行结果: a 4 b 5 c 6 d 7 e 8 dtype: int64 # 自定义索引,index是一个索引列表,里面包含的是字符串,依然可以通过默认索引取值。 ----------------------------------------------- 第三种: pd.Series({"a":1,"b":2}) 执行结果: a 1 b 2 dtype: int64 # 指定索引 ----------------------------------------------- 第四种: pd.Series(0,index=['a','b','c']) 执行结果: a 0 b 0 c 0 dtype: int64 # 创建一个值都是0的数组 -----------------------------------------------

       数据缺失

          dropna():过滤掉值为NaN的行 参数 inplace=True:设置后再打印原本数据则为真的去掉了

          fillna():填充缺失数据 参数 inplace=True:设置后再打印原本数据则为真的替换了

          isnull():返回布尔值数组,缺失值对应为True ---> 可以作为布尔值索引

          notnull():返回布尔值数组,缺失值对应为False ---> 可以作为布尔值索引


      特性 

        1:从 ndarray 创建Series ---> Series(arr) ---> 常用

        2:与标量(数字)运算 ---> sr * 2

        3:两个 Series 运算

        4:通用函数 ---> np.abs(sr)

        5:布尔值过滤 ---> sr[sr>0]

        6:统计函数 ---> mean()、sum()、cumsum()...

        7:从字典创建 Series ---> Series(dic)

        8:in 运算 ---> 'a' in sr 、 for a in sr....

        9: 键索引 ---> sr['a'] 和 sr[['a', 'b', 'c']] 花式索引

        10:键切片 ---> sr['a':'c']

        11:其他函数 ---> 如:get()等

        ......


     

      整数索引      

        loc:标签索引(index)竖向

        iloc:下标索引(value)横向


       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对象进行运算
    ----------------------------------------------------------------------------
    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,一个缺失值
    ----------------------------------------------------------------------------
    ----------------------------------------------------------------------------
    # 将缺失值设为0(fill_value参数),所以最后算出来b索引对应的结果为14
    # 此外,还可以使用 sub/div/mul等方法
    sr1 = pd.Series([12,23,34], index=['c','a','d'])
    sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
    sr1.add(sr3, fill_value=0)
    运行结果:
    a    33.0
    b    14.0
    c    32.0
    d    45.0
    dtype: float64
    ----------------------------------------------------------------------------

    DateFrame   

      是一个 表格型的数据结构相当于是一个二维数组包含一组有序的列(索引)

      也可以被当做是由 Series 组成的字典, 并且公用一个字典

      创建:

    第一种:
    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
    
    > 指定列
    可以通过 columns 参数指定顺序排列
    data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
    pd.DataFrame(data,columns=['one','two'])
    # 打印结果会按照columns参数指定顺序
    ----------------------------------------------------------------------------
    第二种:
    pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])})
    运行结果:
       one  two
    a   1   2
    b   2   1
    c   3   3

      常用属性和方法

        index:获取行索引

        columns:获取列索引

        T:转置

        values:获取值

        describe:获取快速统计信息(个数、平均值、标准差、最大最小值等)


      索引

        同样有行索引和列索引,可以使用标签(index)和位置(value)两种方法进行索引和切片


      切片  

        方法一:两个中括号 ---> 先取列再取行

        方法二:(推荐)使用 loc / iloc 属性 ---> 一个中括号,逗号隔开,先取行再取列

              loc :index

              iloc:value


      时间对象

        详见:https://www.cnblogs.com/xiaoyuanqujing/articles/11646477.html


      数据的分组和聚合    

        分组关键字:groupby

        集合函数:size()、mean()、sum()、first()、last()

        此外,得到的分组数据还可以进行排序

           sort_values(ascending=True) 根据值排序,ascending=True则代表升序,False代表降序

           sort_index(ascending=True) 根据索引排序

        小例子:

    # 分析欧洲杯和欧洲冠军联赛决赛名单
    import pandas as pd
    
    url="https://en.wikipedia.org/wiki/List_of_European_Cup_and_UEFA_Champions_League_finals"
    eu_champions=pd.read_html(url)  # 获取数据
    a1 = eu_champions[2]    # 取出决赛名单
    a1.columns = a1.loc[0]  # 使用第一行的数据替换默认的横向索引
    a1.drop(0,inplace=True)  # 将第一行的数据删除
    a1.drop('#',axis=1,inplace=True)  # 将以#为列名的那一列删除
    a1.columns=['Season', 'Nation', 'Winners', 'Score', 'Runners_up', 'Runners_up_Nation', 'Venue','Attendance']  # 设置列名
    
    a1.tail()  # 查看后五行数据
    a1.drop([64,65],inplace=True)  # 删除其中的缺失行以及无用行
    a1  # 查看a1

      补充:

        read_文件类型(位置) ---> 读取文件数据

        read_html(url) ---> 获取指定 url 页面中的所有表格数据,每个表格代表一个元素,可以根据索引取出

        to_文件类型(位置) ---> 保存数据可以指定参数 index=False 这样可以不保存自动生成的 index

  • 相关阅读:
    jQuery 从无到有.一天完成.
    JavaScript从无到有(一天完成)
    HTML(第一篇)
    前端认识
    三元表达式,列表推导是,字典生成式
    ORM之youku项目小练习(上)
    高逼格壁纸
    pymysql 基操全套
    怎么学好编程?
    mysql 事务
  • 原文地址:https://www.cnblogs.com/pupy/p/11985589.html
Copyright © 2011-2022 走看看