Python 数据分析与展示笔记(三)

Python 数据分析与展示笔记(三)

【Python数据分析与展示】.MOOC. 北京理工大学

  • Pandas库Series类型(pandas库的一维数据类型)

    Numpy Pandas
    基础数据类型 扩展数据类型
    关注数据的结构表达 关注数据的应用表达
    维度:数据间关系 数据域索引间关系
    • Series类型(Series=索引+一维数据)

      import pandas as pd
      a = pd.Series([9,8,7,6]) #已有自动索引
      
      import pandas as pd
      b = pd.Series([9,8,7,6],index=['a','b','c','d']) #指定索引index,作为第二个参数可省略index=
      
    • Series类型创建:

      • Python列表(index与列表元素个数一致)

      • 标量值

        import pandas as pd
        s = pd.Series(25,index=['a','b','c']) #不能省略第二个参数,此处的索引说明了有三个元素,不同索引下相同的值:25
        
      • Python字典

        import pandas as pd
        d = pd.Series({'a':9,'b':8,'c':7}) #键值对,键:索引
        
        e = pd.Series({'a':9,'b':8,'c':7},index=['c','a','b','d']) #前面各自索引对应各自的值,后面的index相当于用索引排序
        
      • ndarray(索引和数据都可以通过ndarray类型创建)

        import pandas as pd
        import numpy as np
        n = pd.Series(np.arange(5)) #arange()函数生成5个元素的ndarray类型
        
        n = pd.Series(np.arange(5),index=np.arange(9,4,-1))
        
      • 其他函数(range()函数等)

    • Series类型的基本操作indexvalues

      import pandas as pd
      b = pd.Series([9,8,7,6],['a','b','c','d'])
      b.index #获得索引
      b.values #获得数据
      
      • 自动索引和自定义索引并存(两种索引不能混用)

        import pandas as pd
        b = pd.Series([9,8,7,6],['a','b','c','d'])
        b[1] #为自动索引,与自定义索引b['b']输出结果相同,
        
    • Series类型的操作类似ndarray类型

      • 索引方法相同,采用[]
      • NumPy中运算和操作可用于Series类型
      • 可以通过自定义索引的列表进行切片
      • 可用自动索引切片,有自定义索引,则一同被切篇
      import pandas as pd
      b = pd.Series([9,8,7,6],['a','b','c','d'])
      b[:3]
      
    • Series类型的操作类似Python字典类型

      • 通过自定义索引访问

      • 保留字in操作

      • 使用.get()方法

        import pandas as pd
        b = pd.Series([9,8,7,6],['a','b','c','d'])
        b['b']
        'c' in b #in:判断所给字段是否在Series索引列表中
        0 in b #判断0是否在用户自定义的索引中,不会判断自动索引
        b.get('f',100) #从b中提取标签'f'对应的值,若无第二个参数则返回空
        
    • Series类型对齐操作

      import pandas as pd
      a = pd.Series([1,2,3],['c','d','e']) #三维对象
      b = pd.Series([9,8,7,6],['a','b','c','d']) #四维对象
      a + b #结果是索引相同的两个值相加,没有相同索引的,相加结果为空
      
    • Series类型的name属性(Series对象和索引都可以有一个名字,存在属性.name中)

      import pandas as pd
      b = pd.Series([9,8,7,6],['a','b','c','d'])
      b.name
      b.name = 'Series对象'
      b.index.name = '索引列'
      
    • Series类型的修改(随时修改,即刻生效)

      import pandas as pd
      b = pd.Series([9,8,7,6],['a','b','c','d'])
      b['a'] = 15
      b.name = 'Series'
      
      b.name = 'New Series'
      b['b','c'] = 20
      

      (Series基本操作类似ndarray和字典,根据索引对齐)

  • Pandas库DataFrame类型(pandas库的二维数据类型)

    • DataFrame类型(DataFrame=行列索引+二维数据)

      • DataFrame是一个表格型数据类型,每列值类型可以不同

      • DataFrame既有行又有列索引

      • DataFrame常用语表达二维数据,但可以表达多维数据

    • DataFrame类型创建

      • 二维ndarray对象

        import pandas pd
        import numpy as np
        d = pd.DataFrame(np.arange(10),reshape(2,5)) #生成自动行和列索引
        
      • 由一维ndarry、列表、字典、元组、或Series构成的字典

        #一维ndarry对象字典创建
        import pandas as pd
        dt = {'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([9,8,7,6],index=['a','b','c','d'])} #包含键为one和two的两个元素
        d = pd.DataFrame(dt) #形成的行索引为abcd,列索引为one,two
        pd.DataFrame(dt,index=['b','c','d'],columns=['two','three']) #新生成一个索引,数据根据行列索引自动补齐,没有的值补NAN
        
        import pandas as pd
        dl = {'one':[1,2,3,4],'two':[9,8,7,6]}
        d = pd.DataFrame(dl,index = ['a','b','c','d']) #可以只给行列数据,其余系统自动补齐,也可给出约定的所有行列数据,其余行列自动补齐
        
        import pandas pd
        dl = {'城市':['北京','上海','广州','深圳','沈阳'],
              '环比':[101.5,101.2,101.3,102.0,100.1],
              '同比':[120.7,127.3,119.4,140.9,101.4],
              '定基':[121.4,127.8,120.0,145.5,101.6]}
        d = pd.DataFrame(dl,index=['c1','c2','c3','c4','c5']) #为每一行指定新的索引:c1,c2,c3,c4,c5
        

        输出:

      Python 数据分析与展示笔记(三)_第1张图片

      d.index #获取0轴上的索引
      d.columns #获取1轴上的索引
      d.values #获取数据
      d['同比'] #获取列:”同比“
      d.loc['c2'] #获取行:c2,旧版本使用:d.ix['c2']
      d['同比']['c2'] #获取某个数据
      
      • Series类型

      • 其他的DataFrame类型

      (DataFram是二维带”标签“数组,基本操作类似Series,依据行列索引)

  • Pandas库的数据类型操作

    • 重新索引

      参数 说明
      index,columns 新的行列自定义索引
      fill_value 重新索引中,用于填充缺失位置的值
      method 填充方法,ffill当前值向前填充(邻近的前面值),bfill向后填充(邻近的后面的值)
      limit 最大填充量
      copy 默认True,生成新的对象,False时,新旧相等不复制
    • 索引类型的常用方法(Series和DataFrame的索引是Index类型,Index对象是不可修改类型)

      方法 说明
      .append(idx) 连接另一个Index对象,产生新的Index对象
      .diff(idx) 计算差集,产生新的Index对象
      .intersection(idx) 计算交集
      .union(idx) 计算并集
      .delete(loc) 删除loc位置处的元素
      .insert(loc,e) 在loc位置增加一个元素e
      .drop() 删除Series和DataFrame指定行或列索引
      (Series只有0轴,操作时默认操作0轴上的元素,而DataFrame有0轴和1轴,对1轴操作时指定axis=1)
    • 例:

      import pandas as pd
      dl = {'城市':['北京','上海','广州','深圳','沈阳'],
            '环比':[101.5,101.2,101.3,102.0,100.1],
            '同比':[120.7,127.3,119.4,140.9,101.4],
            '定基':[121.4,127.8,120.0,145.5,101.6]}
      d = pd.DataFrame(dl,index=['c1','c2','c3','c4','c5'])
      d = d.reindex(index=['c5','c4','c3','c2','c1']) #reindex重新建立索引
      d = d.reindex(columns=['城市','同比','环比','定基']) #改变列的顺序
      newc = d.columns.insert(4,'新增') #新增一个元素
      newd = d.reindex(columns=newc,fill_value=200) #对新增的元素进行填充
      
      import pandas as pd
      dl = {'城市':['北京','上海','广州','深圳','沈阳'],
            '环比':[101.5,101.2,101.3,102.0,100.1],
            '同比':[120.7,127.3,119.4,140.9,101.4],
            '定基':[121.4,127.8,120.0,145.5,101.6]}
      d = pd.DataFrame(dl,index=['c5','c4','c3','c2','c1'])
      nc = d.columns.delete(2)
      ni = d.index.insert(5,'c0')
      nd = d.reindex(index=ni,columns=nc).ffill() #[!]原视频的写法报错
      
      import pandas as pd
      dl = {'城市':['北京','上海','广州','深圳','沈阳'],
            '环比':[101.5,101.2,101.3,102.0,100.1],
            '同比':[120.7,127.3,119.4,140.9,101.4],
            '定基':[121.4,127.8,120.0,145.5,101.6]}
      d = pd.DataFrame(dl,index=['c5','c4','c3','c2','c1'])
      d.drop('c5')
      d.drop('同比',axis=1)
      
      a = pd.Series([9,8,7,6],index=['a','b','c','d'])
      a.drop(['b','c'])
      
  • Pandas库的数据类型运算

    • 方法形式运算

      方法 说明
      .add(d,**argws) 类型间加法运算,可选参数
      .sub(d,**argws) 类型间减法运算,可选参数
      .mul(d,**argws) 类型间乘法运算,可选参数
      .div(d,**argws) 类型间除法运算,可选参数
    • 例:

      import pandas as pd
      import numpy as np
      a = pd.DataFram(np.arange(12).reshape(3,4))
      b = pd.DataFrame(np.arange(20).rehspae(4,5))
      b.add(a,fill_value = 100) #a+b,其中缺少的元素用100补齐
      a.mul(b,fill_value = 0) #a*b,其中缺少的元素用0补齐
      
      #不同维度间运算(为广播运算,一维Series默认在轴1参与运算)
      import pandas as pd
      import numpy as np
      b = pd.DataFrame(np.arange(20).reshape(4,5))
      c = pd.Series(np.arange(4))
      c - 10
      b - c
      
      b.sub(c,axis=0) #指定0轴参与运算:使用运算方法可以令一维Series参与运算
      
    • 比较运算法则

      import pandas as pd
      import numpy as np
      
      #同维度运算尺寸一致
      a = pd.DataFrame(np.arange(12).reshape(3,4))
      d = pd.DataFrame(np.arange(12,0,-1).reshape(3,4))
      a > d
      a == d
      
      #不同维度,广播运算,默认在1轴
      a = pd.DataFrame(np.arange(12).reshape(3,4))
      c = pd.Series(np.arange(4))
      a > c
      c > 0
      
  • [!] 遇到的问题:index must be monotonic increasing or decreasing

    错误代码:(版本不同所以报错)

    nd = d.reindex(index=ni,columns=nc,method='ffill')
    

    更正后代码:

    nd = d.reindex(index=ni,columns=nc).ffill()
    

    参考:https://blog.csdn.net/mr_muli/article/details/83962897

你可能感兴趣的:(Python,爬虫,python)