zoukankan      html  css  js  c++  java
  • 数据分析 Pandas 简介和它的的数据结构

    本文主要讲Pandas 的Series和DataFrame 的相关属性和操作
    1、Series的相关属性和操作
    # --Series是一种类似于一维数组的对象,只能存放一维数组!由以下两部分组成:
    # value:一组数据 ndarray类型
    # index:相关数据的索引标签
    #
    # --Series 的创建:
    # (1)由列表或numpy数组创建:默认索引为0到n-1的整数索引,
    # (2)还可以通过index的参数指定索引

    1.2、Series的索引和切片操作如下:
    import pandas as pd
    from pandas import Series,DataFrame
    # 创建一个Series,index=['a','b','c']为显示索引:增强可读性
    s = Series(data=[1,2,3],index=['a','b','c'])
    #索引的使用:下面三种方式都可以
    print(s.a)
    print(s[0])
    print(s['a'])
    #----Series 的切片
    print(s[0:1])    # --- 这种索引切片是不包含1的值的
    print(s['a':'b'])
    print(s[[0,1]])
    print(s[['a','b']])
    

    1.3、Series 的相关函数及其特性
    s.head(n) 查看前面n个值
     s.tail(n) 分别查看后面n个值


    s.unique() ---对Series a元素进行去重----
    s = Series([1,1,3,5,7,7,9,45,65])
    ns = s.unique()     # ns 为  [1,3,5,7,9,45,65]
    print(ns)
    
              Series加法运算: 两个Series 数组必须索引相同才能相加成功,不然就会出现缺失数据 NaN 的情况
    s1 = Series(data=[1,2,3],index=['a','b','c'])
    s2 = Series(data=[1,2,3],index=['a','d','c'])
    s = s1 + s2
    print(s)              # s的结果: a 2.0
                                    # b NaN
                                    # c 6.0
                                    # d NaN
    
    
            Series的索引可以为True/False:
    print(s[[True,False,True,False]]) # --- 发现:如果索引为 False 时,值不显示


    s.isnull() # --- 判断s中每个元素是否为NaN ,等于NaN返回True
    s.notnull() # --- 判断s中每个元素是否不为NaN ,不等于NaN返回True

    #---批量过滤NaN值----------
    print(s[s.notnull()]) # s.notnull()返回的 True/False 数组,作为 s[]的索引
    ----------------------------------------------------------------------------------------------------------
    2、DataFrame 的相关属性和操作
    ---定义:DataFrame 是一个表格,二维的数据结构
    ---DataFrame == mydql的table
    ---设计初衷:将Series 的一维数据结构扩展到多维

    ---DataFrame 既有行索引,还有列索引
    行索引:index DataFrame会自动在每一行加上索引
    列索引:columns 使用字典创建DataFrame后,columns参数将不可被使用
    值:values 同Series 一样 传入的列与字典的键不匹配,则相应的值为NaN

    ---创建 DataFrame
    import numpy as np
    df = DataFrame(data = np.random.randint(0,100,size=(3,4)),index=['a','b','c'],columns=['A','B','C','D'])
    print(df)
    #        A   B   C   D
    #    a  45  63  88  52
    #    b  74   4  56  35
    #    c  58  22  14  25
    

     2.2、DataFrame 的属性 :index    columns    values    shape

            print('返回所有的值(3行4列)',df.values)
    print('返回列索引',df.columns)
    print('返回行索引',df.index)

    使用 ndarray 创建 DataFrame:创建一个表格用于展现张三李四的java/python 成绩:
    data ={
        '张三':[120,120,120],
        '李四':[22,34,34]
    }
    df = DataFrame(data= data,index=['语文','英语','数学'])  
    print(df)

      ---        张三 李四
      ---语文 120   22
      ---英语 120   34
      ---数学 120   34

    2.3、使用DataFrame 的索引操作
    (1)、对列进行索引>>>>默认列索引
    print(df['张三'])
    #语文 120
    #英语 120
    #数学 120
    #Name: 张三, dtype: int64
    
    print(df[['李四','张三']])   # --- 取两列,index取多列要加“[]”
    #李四 张三
    #语文 22 120
    #英语 34 120
    #数学 34 120  
            (2)、对行进行索引
    使用df.loc[]加index进行索引 --隐式索引
    使用df.iloc[]加整数进行索引 --显式索引
    print('使用df.loc[]加index进行索引',df.loc['语文'])
    #使用df.loc[]加index进行索引
    #张三 120
    #李四 22
    Name: 语文, dtype: int64
    
    print('使用df.loc[]取多行',df.loc[['语文','英语']])  # --- 取两行,index取多行要加“[]”
    #使用df.loc[]取多行 
    #张三 李四
    #语文 120 22
    #英语 120 34
    
    print('使用df.iloc[]加整数进行索引',df.iloc[0])
    #使用df.iloc[]加整数进行索引 
    #张三   120
    #李四   22
    Name: 语文, dtype: int64
    
    print('使用df.iloc[]取多行',df.iloc[[0,1]])  # --- 取两行,index取多行要加“[]”
    #使用df.iloc[]取多行 
    #    张三    李四
    #语文 120    22
    #英语 120    34 
            (3)、对元素进行索引
    默认df['张三']第一个索引为列索引,第二个为行索引
    loc[] 第一个为行索引,第二个为列索引
    print('对元素进行索引',df['张三']['语文'])  
    #对元素进行索引 120
    
    print('使用df.loc[]对元素索引',df.loc['英语']['张三'])
    #使用df.loc[]对元素索引 120
    
    print('同上写法',df.loc['英语','张三'])  
    #同上写法 120

          (4)、取多个元素

                  “,”左边为行,右边为列

    print('使用df.loc[]取多个元素',df.loc[['英语','语文'],'张三']) 
    #使用df.loc[]取多个元素
    
    #英语 120 
    #语文 120
    #Name: 张三, dtype: int64

       2.4、DataFrame 的切片操作            

    • 行切片: df[0:2]切片默认取得是行
    print(df[0:2]) 
    #    张三  李四
    #语文 120  22
    #英语 120  34
    print(df[2])  ---取第二列
    • 切片 iloc : “,”左边为行,右边为列

              不加 “,” 默认取得是行

    print(df.iloc[0]) --取第一行
    print(df.iloc[-1])--取最后一行
    print(df.iloc[0:2]) --取的是第一第二行
    print(df.iloc[:,0:1])  --取第一列
    print(df.iloc[2,3])   --取第二行第三列的数据
    print(df.iloc[2,1:3])   --取索引未2的行第索引1到3的列
    #       张三
    # 语文   120
    # 英语   120
    # 数学   120

     2.5、DataFrame 的运算操作 

                 DataFrame 的运算和Series 一样:

                              在运算中自动对齐索引相同的数据

                              如果索引不对应就补NaN

    重要:
          使用python操作符:以行为单位操作(参数必须是行),对所有行都有效。


    使用pandas操作函数:

    •  axis = 0 以列为单位操作(参数必须是列),对所有列都有效
    •  axis = 1 以行为单位操作(参数必须是行),对所有行都有效
    •  注意:fill_value在df和series之间运算时,不能使用

    练习:

    1、假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。

    2、假设张三期中考试数学被发现作弊,要记为0分,如何实现?

    3、李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?

    4、后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?

    df1 = DataFrame(data=np.random.randint(0,100,size=(5,3)), index=list("ABCDE"), columns=["python","java","php"])
    df2 = DataFrame(data=np.random.randint(0,100,size=(5,3)), index=list("ABCDE"), columns=["python","java","php"])
    display(df1, df2)
     
    1.(df1 + df2)/2
    2.df1.loc["B","java"] = 0
    3.df1.loc["C"] += 100
    4.df1 += 10
    
    
    
  • 相关阅读:
    彻底理解jdbc为什么用反射创建驱动程序对象
    java反射
    hashcode(),equal()方法深入解析
    面试经验总结
    Spring安全权限管理(Spring Security)
    http认证方式
    ubuntu/linux mint 创建proc文件的三种方法(两)
    cocos2dx使用tolua关于字符串处理的一个问题
    Ubuntu——grub rescue 主引导修复
    BCM wifi分析
  • 原文地址:https://www.cnblogs.com/aitree/p/14278998.html
Copyright © 2011-2022 走看看