zoukankan      html  css  js  c++  java
  • pandas之DataFramer入门到弃坑

    一 前言

    前文写了 Series 一维的数据集,可以理解为一个一维数组,本篇将学习DataFrame 是用于储存多维数据集;觉得知识追寻者文章不错,可以点赞加关注,读者的肯定才是对作者最大的创作动力

    公众号:知识追寻者

    知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

    二 创建

    DataFrame 如何理解,简单的理解就是像excel 表格一个,有行有列;实质上每个DataFrame 都是多个Series组合而成,可以将DataFrame的单个列看作是 一个Series

    2.1 简单创建

    如下的方式进行创建DataFrame, 会将字典的键当作 DataFrame 的列,数组值当作 DataFrame 的列值;与Series一样,DataFrame 也会创建默认的索引(从0开始)

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    data = {
        'user' : ['zszxz','craler','rose'],
        'sequence' : [100, 101, 102],
        'age' : [18,18,18]
    }
    
    frame  = pd.DataFrame(data)
    print(frame)
    

    输出

         user  sequence  age
    0   zszxz       100   18
    1  craler       101   18
    2    rose       102   18
    

    2.2 指定索引创建

    除了默认的索引,还可以指定索引,这是一个非常有必要的操作,这样可以让你的数据更改有代表意义,索引的位数,最好跟数据(下面user列的数据就是3位)一致,如果数据位数少于index位数,通常会用NaN代替;反之会报错;

    data = {
        'user' : ['zszxz','craler','rose'],
        'sequence' : [100, 101, 102],
        'age' : [18,18,18]
    }
    index = ['user1','user2','user3']
    frame  = pd.DataFrame(data,index)
    print(frame)
    

    输出

             user  sequence  age
    user1   zszxz       100   18
    user2  craler       101   18
    user3    rose       102   18
    

    2.3指定列创建

    可以使用已有的DataFrame进行二次创建,此时指定列后生成新的DataFrame会按照columns 指定的顺序创建;

    data = {
        'user' : ['zszxz','craler','rose'],
        'sequence' : [100, 101, 102],
        'age' : [18,18,18]
    }
    frame  = pd.DataFrame(data)
    reframe = pd.DataFrame(data,columns=['sequence', 'user'])
    print(reframe)
    

    输出

       sequence    user
    0       100   zszxz
    1       101  craler
    2       102    rose
    

    2.4 使用numpy创建

    简便的方式就是使用numpy来创建数据

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    print(frame)
    

    输出

           zszxz  craler  rose
    user1      0       1     2
    user2      3       4     5
    user3      6       7     8
    

    2.5 字典方式创建

    如下的字典方式创建,外层的字典的键会作为DataFrame 的列 ;内层字典的键会作为 DataFrame 的索引,内存的字典的值作为对应的列和索引位置上的值;

    dic = {
        'user1':{'zszxz':0,'craler':1,'rose':2},
        'user2':{'zszxz':3,'craler':4,'rose':5},
        'user3':{'zszxz':6,'craler':7,'rose':8}
    }
    frame = pd.DataFrame(dic)
    print(frame)
    

    输出

            user1  user2  user3
    zszxz       0      3      6
    craler      1      4      7
    rose        2      5      8
    

    三 取列

    3.1 取所有值

    使用 DataFrame.values 会获得所有 的values 值;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    print(frame.values)
    

    输出

    [[0 1 2]
     [3 4 5]
     [6 7 8]]
    

    3.2取所有索引

    使用 DataFrame.index 会获得所有 的index ;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    print(frame.index)
    
    

    输出

    Index(['user1', 'user2', 'user3'], dtype='object')
    

    3.3 取所有列

    使用 DataFrame.columns 会获得所有 的columns

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    print(frame.columns)
    

    输出

    Index(['zszxz', 'craler', 'rose'], dtype='object')
    

    3.4 取特定列

    想要获取 DataFrame 中某列的数据(Series)可以使用 DataFrame.列名 或者 DataFrame['列名']

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    print(frame.zszxz)
    

    输出

    user1    0
    user2    3
    user3    6
    Name: zszxz, dtype: int32
    

    四 赋值

    4.1 简单赋值

    赋值操作与数组操作类似,按照 frame['zszxz'] = 666 所示赋值意指将 zszxz 这列的数据都赋值为666;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame['zszxz'] = 666
    print(frame)
    

    输出

           zszxz  craler  rose
    user1    666       1     2
    user2    666       4     5
    user3    666       7     8
    

    4.2 精确赋值

    想要对某列的每个元素赋值,最好的方式就是使用Series,必须指出index,如果data数据位数不够则会使用NaN代替空值;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    ser = pd.Series(data = [1,2,3],index=index)
    frame['zszxz'] = ser
    print(frame)
    

    输出

           zszxz  craler  rose
    user1      1       1     2
    user2      2       4     5
    user3      3       7     8
    

    除了使用Series也可以使用numpy的编排方式;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame['zszxz'] = np.arange(3)
    print(frame)
    

    输出

           zszxz  craler  rose
    user1      0       1     2
    user2      1       4     5
    user3      2       7     8
    

    五 删除

    需要删除某列是可以使用def 关键字,比如del frame['rose'] 表示删除 rose列的数据;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    del frame['rose']
    print(frame)
    

    输出

           zszxz  craler
    user1      0       1
    user2      3       4
    user3      6       7
    

    六 取行

    要从DataFrame中去出某些行则需要像数组切片一样的使用方式,如下所示中 frame[0:1] 表示起始索引为0,结束索引为1(不包括)的行;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    print(frame[0:1])
    

    输出

           zszxz  craler  rose
    user1      0       1     2
    

    如果需要选择某个特定行中的某列值,按照 frame['zszxz'][0] 方式选取,表示选取列zszxz的第一个位置元素(注意索引是从0开始)

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    print(frame['zszxz'][0])
    print(frame['zszxz'][1])
    

    输出

    0
    3
    

    七 转置

    转置意指将行和列对调,其实现方式非常简单,使用 DataFrame .T 属性即可;如下所示中本来列是['zszxz','craler','rose']的 3 * 3 的 矩阵 经过转置后 会变成列是 ['user1','user2','user3'] 的 3 * 3的矩阵;简记就是列和索引对调了;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    print(frame.T)
    

    输出

            user1  user2  user3
    zszxz       0      3      6
    craler      1      4      7
    rose        2      5      8
    

    八 简单筛选

    8.1 大于

    示例中使用frame>5 会筛选出所有值大于5的数据,使用 bool类型标识,数据大于5为True, 反之为False;

    dic = {
        'user1':{'zszxz':0,'craler':1,'rose':2},
        'user2':{'zszxz':3,'craler':4,'rose':5},
        'user3':{'zszxz':6,'craler':7,'rose':8}
    }
    frame = pd.DataFrame(dic)
    print(frame>5)
    

    输出

            user1  user2  user3
    zszxz   False  False   True
    craler  False  False   True
    rose    False  False   True
    

    可以使用上面的条件进行二次筛选,可以获得想要的数据而不是布尔类型表示;不符合的数据使用NaN代替

    dic = {
        'user1':{'zszxz':0,'craler':1,'rose':2},
        'user2':{'zszxz':3,'craler':4,'rose':5},
        'user3':{'zszxz':6,'craler':7,'rose':8}
    }
    frame = pd.DataFrame(dic)
    print(frame[frame>5])
    

    输出

            user1  user2  user3
    zszxz     NaN    NaN      6
    craler    NaN    NaN      7
    rose      NaN    NaN      8
    

    8.2 判断从属

    使用DataFrame.isin() 方法 判定元数是否属于 DataFrame,参数是个数组;

    dic = {
        'user1':{'zszxz':0,'craler':1,'rose':2},
        'user2':{'zszxz':3,'craler':4,'rose':5},
        'user3':{'zszxz':6,'craler':7,'rose':8}
    }
    frame = pd.DataFrame(dic)
    print(frame.isin([0,1,2]))
    

    输出

            user1  user2  user3
    zszxz    True  False  False
    craler   True  False  False
    rose     True  False  False
    

    同理也可以对上面的过滤条件进行二次筛选 ,不符合的数据使用NaN代替;

    dic = {
        'user1':{'zszxz':0,'craler':1,'rose':2},
        'user2':{'zszxz':3,'craler':4,'rose':5},
        'user3':{'zszxz':6,'craler':7,'rose':8}
    }
    frame = pd.DataFrame(dic)
    print(frame[frame.isin([0,1,2])])
    

    输出

            user1  user2  user3
    zszxz       0    NaN    NaN
    craler      1    NaN    NaN
    rose        2    NaN    NaN
    
  • 相关阅读:
    750. Number Of Corner Rectangles
    [Project Euler] 3. Largest Prime factor
    [Project Euler] 2. Even Fibonacci numbers
    Jmeter学习笔记3-参数化
    SQL多表连接查询补充
    Jmeter学习笔记2-原件作用域与执行顺序
    Jmeter学习笔记1-实践介绍
    运用badboy录制jmeter脚本
    【SQL提数】左连接使用
    【功能测试技巧2】dubbo引起的数据精度的思考
  • 原文地址:https://www.cnblogs.com/zszxz/p/12843123.html
Copyright © 2011-2022 走看看