zoukankan      html  css  js  c++  java
  • 2、Python 数据分析-Pandas基础操作

    2、Python 数据分析-Pandas

    1、简介

    Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。

    pandas的目的是什么?

    • numpy能够帮助我们处理的是数值型的数据,在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!

    2、什么是pandas?

    Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。

    数据类型概览

    Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。

    Time- Series:以时间为索引的Series。

    DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。

    Panel :三维的数组,可以理解为DataFrame的容器。

    Panel4D:是像Panel一样的4维数据容器。

    PanelND:拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。

    最常用的数据类型是一维Series和二维DataFrame

    3、一维【Series】

    3.1、Series组成

    • values:一组数据(ndarray类型)
    • index:相关的数据索引标签
    #隐式索引:默认索引,行号默认从0开始。0,1,2,3,4
    a = Series(data=[1,2,3])
    >>>
    0    1
    1    2
    2    3
    dtype: int64
    
        
    #显式索引:自定义的索引
    b = Series(data=[1,2,3],index=['A','B','C'])
    >>>
    A    1
    B    2
    C    3
    dtype: int64
    
    

    3.2、Series的创建

    • 由列表或numpy数组创建

      a = Series(data=np.random.randint(0,10,size=(3)))
      >>>
      0    3
      1    0
      2    7
      dtype: int32
      
    • 由字典创建

      dic = {
          '语文':100,
          '数学':110,
          '外语':120,
      }
      b = Series(data=dic)
      >>>
      语文    100
      数学    110
      外语    120
      dtype: int64
      

    3.3、Series的索引和切片

    b = Series(data=[1,2,3],index=['A','B','C'])
    b[1]
    >>>
    2
    
    b["A"]
    >>>
    1
    
    b.C
    >>>
    3
    
    b[0:2]		#或b['A':'B']
    >>>
    A    1
    B    2
    dtype: int64
       
    b[0:3:2]	#或b['A':'B':2]
    >>>
    A    1
    C    3
    dtype: int64
       
    
    

    3.4、Series的常用属性

    • shape#返回数组的形状
    • size#返回数组的个数
    • index#返回数组索引
    • values#返回数组值
    b = Series(data=[1,2,3],index=['A','B','C'])
    b.shape
    >>>
    (3,)
    
    b.size
    >>>
    3
    
    b.index
    >>>
    Index(['A', 'B', 'C'], dtype='object')
    
    b.values
    >>>
    array([1, 2, 3], dtype=int64)
    
    

    3.5、Series的常用方法

    • head(),tail()
    b = Series(data=[1,2,3],index=['A','B','C'])
    b.head(2)	#显示前两个元素
    >>>
    A    1
    B    2
    dtype: int64
        
    b.tail(2)	#显示后两个元素
    >>>
    B    2
    C    3
    dtype: int64
    
    • unique()
    s = Series(data=[1,1,2,2,3,3,4,4,5,6,7,8,9])
    s.unique()	#去重
    >>>
    array([1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)
    
    • add() sub() mul() div()
    
    

    3.6、Series的算术运算

    • 法则:索引一致的元素进行算数运算否则补空

    isnull(),notnull()

    s1 = Series(data=[1,2,3,4,5])
    s2 = Series(data=[1,2,3])
    s = s1+s2
    >>>
    0    2.0
    1    4.0
    2    6.0
    3    NaN
    4    NaN
    dtype: float64
        
    s.isnull()		#isnull检测哪些元素为空值,显示True,反之False
    >>>
    0    False
    1    False
    2    False
    3     True
    4     True
    dtype: bool
        
    s.notnull()		#notnull检测哪些元素为空值,显示False,反之True
    >>>
    0     True
    1     True
    2     True
    3    False
    4    False
    dtype: bool
        
    #想要去除Seriese中的空值
    s[[True,True,True,False,False]]		#或s[s.notnull()]
    >>>
    0    2.0
    1    4.0
    2    6.0
    dtype: float64
        
    

    4、二维DataFrame

    4.1、DataFrame组成

    • DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
      • 行索引:index
      • 列索引:columns
      • 值:values
    DataFrame(data=np.random.randint(0,100,size=(3,4)))
    

    4.2、DataFrame的创建

    • ndarray创建
    • 字典创建
    dic = {
        'name':['小王','小李','小张'],
        'sex':[18,22,33]
    }
    DataFrame(data=dic,index=['A','B','C'])
    

    4.3、DataFrame的属性

    • values#返回数组值
    • columns#返回数组列行索引
    • index#返回数组列索引
    • shape#返回数组的形状
    dic = {
        'name':['小王','小李','小张'],
        'sex':[18,22,33]
    }
    df = DataFrame(data=dic,index=['A','B','C'])
    df.values
    >>>
    array([['小王', 18],
           ['小李', 22],
           ['小张', 33]], dtype=object)
    
    df.columns
    >>>
    Index(['name', 'sex'], dtype='object')
    
    df.index
    >>>
    Index(['A', 'B', 'C'], dtype='object')
    
    df.shape
    >>>
    (3, 2)
    

    4.4、练习1:

    1、根据以下考试成绩表,创建一个DataFrame,命名为df:

        张三  李四  
    语文 150  0
    数学 150  0
    英语 150  0
    理综 300  0
    
    dic = {
        '张三':[150,150,150,150],
        '李四':[0,0,0,0]
    }
    df = DataFrame(data=dic,index=['语文','数学','英语','理综'])
    
    

    4.5、DataFrame索引操作

    • 对行进行索引

      dic = {
          '张三':[150,150,150,150],
          '李四':[0,0,0,0]
      }
      df = DataFrame(data=dic,index=['语文','数学','英语','理综'])
      
      iloc:
      - 通过隐式索引取行
      
      #取单行
      df.iloc[0]
      >>>
      张三    150
      李四      0
      Name: 语文, dtype: int64
              
      #取多行
      df.iloc[[0,2]]
      
      

    loc:
    - 通过显示索引取行
    
    df.loc['英语','张三'] #取单个值
    >>>
    150
    
    
    df.loc[['英语','数学'],'张三'] #取多个值
    >>>
    英语    150
    数学    150
    Name: 张三, dtype: int64
    
    • 队列进行索引

      dic = {
          '张三':[150,150,150,150],
          '李四':[0,0,0,0]
      }
      df = DataFrame(data=dic,index=['语文','数学','英语','理综'])
      df['张三']#取一列
      >>>
      语文    150
      数学    150
      英语    150
      理综    150
      Name: 张三, dtype: int64
      
      df[['李四','张三']] #取多列
      # df[0] #error,如果df有显示索引,那么在索引取值的话,只能用显示索引不能用隐式索引
      

    4.6、DataFrame切片操作

    • 对行进行切片
    #df[index1:index3]
    df[0:2] #切行
    

    • 对列进行切片
    #df.iloc[:,col1:col3]
    df.iloc[:,0:1] #切列
    

    4.7、DataFrame的运算

    • 同Series

    4.8、练习2:

    1. 假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
    2. 假设张三期中考试数学被发现作弊,要记为0分,如何实现?
    3. 李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
    4. 后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?

    1️⃣

    qimo = df
    qizhong = df
    (qizhong + qimo) / 2 #计算均值
    

    2️⃣

    qizhong.iloc[1,0] = 0
    

    3️⃣

    qizhong['李四'] += 100
    

    4️⃣

    qizhong += 10
    

  • 相关阅读:
    搜刮一些开源项目的APP
    iOS Crash文件的解析
    iOS中RGB颜色转换
    随笔杂记
    iOS字体
    方法总结
    经验点滴
    个人理解
    OC 知识点回顾
    IOS UI 笔记整理回顾
  • 原文地址:https://www.cnblogs.com/remixnameless/p/13205503.html
Copyright © 2011-2022 走看看