Pandas

作者: MA木易YA | 来源:发表于2019-03-08 22:51 被阅读4次

        pandas是一款数据处理工具,集成了numpy以及matplotlib,拥有便捷的数据处理以及文件读取能力

    核心数据结构

    1. DataFrame

        numpy仅用作计算,在数据表示方面还有所欠缺,很难从数据上面看出信息表达的含义,在这里我们可以将DataFrame看作是有行列索引(标题)的二维数组

    I. DataFrame属性

    pd.DataFrame(array, index,columns)

    因为pandas是集成了numpy的,属性方面用法和功能都类似

    • shape(形状)
    • values(除去行列索引后的值)
    • T(行列转置)
    • index(行索引)
    • columns(列索引)

    II. 方法

    • head(size)——显示前size行数据,默认前五行
    • tail(size)——显示后size行数据,默认后五行
     import pandas as pd
    
    #二维数组定义
     s = [[10,20],[20,30],[30,40]]
    #行索引定义
     row = ["test{}".format(i+1) for i in range(3)]
    #列索引定义
     col = ["2019-3-{}".format(i+1) for i in range(2)]
    
    data = pd.DataFrame(s, index=row, columns=col)
    
    #输出
           2019-3-1  2019-3-2
    test1        10        20
    test2        20        30
    test3        30        40
    
    

    III.设置索引

    • 修改行列索引值

    只能整体修改,不能修改单独某一项

    • 重设索引

    reset_index(drop=False)

        重置索引值,默认drop为False,不删除原索引,将其单独立为一列,在此基础上将索引重置

    • 设置新的索引 __set_index(keys, drop=True)__

      • keys:列索引名称或者列索引名称的列表
      • drop: boolean,默认为True,当做新的索引,删除原来的列
    #设置多个索引
    df = pd.DataFrame({'month':[1,4,7,10],'year':[2012,2014,2013,2016],'sale':[55,40,84,31]})
    
    df.set_index(['year', 'month'])#设置之后此时返回的index是MultiIndex类型
    
    #输出
                sale
    year month
    2012 1        55
    2014 4        40
    2013 7        84
    2016 10       31
    >>>
    

    IV. MultiIndex

    多级或分层索引对象,可用于存放三维数据

    • index属性
      • names:levels的名称
      • levels:每个level的元组值
     new_df = df.set_index(['year', 'month'])
    
    new_df.index
    
    new_df.index.names
    
    new_df.index.levels
    
    #输出
    ----------------------index--------------------------------------------
    MultiIndex(levels=[[2012, 2013, 2014, 2016], [1, 4, 7, 10]],
               labels=[[0, 2, 1, 3], [0, 1, 2, 3]],
               names=['year', 'month'])
    ----------------------------------------------------------------------------------
    
    ----------------------names--------------------------------------------
    FrozenList(['year', 'month'])
    ----------------------------------------------------------------------------------
    
    ----------------------levels--------------------------------------------
    FrozenList([[2012, 2013, 2014, 2016], [1, 4, 7, 10]])
    

    2. Panel

        存放三维数据的面板容器,0.20.0后已经弃用,推荐DataFrame上的MultiIndex方法表示3D数据

    I.维度

    • items => axis0,每个项目对应内部包含的数据帧(DataFrame)
    • major_axis => axis 1,它是每个数据帧(DataFrame)的索引(行)
    • minor_axis => axis 2, 它是每个数据帧(DataFrame)的列

    3. Series

    可理解为带索引的一维数组

    I. 属性

    • index—— 索引项
    • values——索引值,numpy.ndarray类型

    II. 创建Series

    • 通过已有数据创建

    指定内容,默认索引

    pd.Series(np.arange(10))
    
    #输出
    0    0
    1    1
    2    2
    3    3
    4    4
    5    5
    6    6
    7    7
    8    8
    9    9
    
    

    指定索引

    pd.Series([6.7,5.6,3,10,2],index=[1,2,3,4,5])
    
    #输出
    1     6.7
    2     5.6
    3     3.0
    4    10.0
    5     2.0
    dtype: float64
    

    • 通过字典数据创建
    pd.Series({'red':1000,'blue':100,'green':500,'yellow':200})
    
    #输出
    red       1000
    blue       100
    green      500
    yellow     200
    dtype: int64
    

    III. 索引操作

    data = pd.readcsv('filename.csv')

    1)直接索引
              必须满足先列后行的规则,data[col][row]
    2)按名字索引
              new_data = data.locp[索引名,索引名]或者new_data = data.locp[索引名][索引名]
    3)直接按照数字索引
              data.iloc[number,number]
    4)IX组合索引(数字和名字组合)
              data.ix[parm,parm]

    • 在进行索引操作的时候,可以结合前面的index以及columns.get_indexer等方法进行数据的获取

    IV. 赋值

    按照上述索引方法找到对应数据进行赋值即可

    V. 排序
    1)按照内容排序

    sort_values(by=,ascendinf=)

    • by:排序关键字,可指定单键或者多建(以列表形式赋给by即可)
    • ascending:默认升序,False则降序

    2)按照索引排序

    sort_index()

    • 排序方法对DataFrame以及Series都是适用的,前者需要指定关键字,但是Series的一维数据只需要直接调用方法执行即可。

    VI. DataFrame运算
    1)算术运算
              可以直接用运算符(+、-、*等)或者相应的运算方法(add()、sub()等),作用于数据里面的所有元素
    2)逻辑运算

    • 逻辑运算符
      > (大于) 、 < (小于) 、 &(并且) 、 |(或者)
                返回带索引的布尔值,可以用相应的索引方法筛选数据,例如data[data['parm']>2],在使用&的时候要注意优先级,不确定的可以用括号包裹

    • 逻辑运算函数

      • query(expr) —— 按照expr字符串条件查询
      • isin(values) —— 判断是否含有values数值,有则返回True,否则返回False

    V. 统计运算
        max、mean、median、var、std等,此外可以使用describe()方法统一进行运算,它会自动统计出一些常用运算结果(包含以上内容)

    count.png
    • 这里的idxmax就是类似之前numpy里面的argmax方法获取最大值的位置

    VI. 自定义运算

    如果需要额外的运算规则,可以自定义一个函数进行统计

    apply(func, axis=0)

    • func:自定义函数
    • axis: 默认为0,计算列,axis=1时对行运算
    #自定义一个对列数据最大值减最小值的运算函数
    
    data.apply(lambda x : x.max()-x.min(), axis=0)
    

    pandas画图

    image.png

    文件读取与存储

    image.png

    1. csv操作

    I. 读取csv

    pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, names=, usecols=)

    • filepath_or_buffer:文件路径
    • usecols:指定读取的列名,列表形式,用作筛选所需要的数据,也可以通过drop函数剔除数据
    • names:如果遇到直接就是数据的文件,需要通过names参数手动填入索引项

    II. 写入csv

    DataFrame.to_csv(path_or_buf=None, sep=',', columns=None, header=True, index=True, index_label=None,mode='w', encoding=None)

    • path_or_buf:文件路径
    • sep:分隔符
    • columns:要保存的列,列表形式
    • header:默认为True,是否写进列索引值
    • index:是否写进行索引值
    • mode:w为重写,a为追加
    • series和dataframe操作基本一致

    2. HDF5操作

        HDF5的存储支持压缩,使用的方式是blosc,速度最快也是pandas默认支持的,可以提高磁盘利用率,节省空间的同时还支持跨平台,可以轻松迁移到hadoop上面,HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame,一个键对应一个DataFrame,也可以相当于是存储三维数据了

    I.读取hdf5

        读取以及写入需要指定键,不同的键对应不同的DataFrame

    pandas.read_hdf(path_or_buf, key=None, **kwargs)

    • key:读取的键
    • mode:打开文件的方式

    II. 写入hdf5文件

    可以写入同一个hdf5文件当中,以不同的键区分开来

    DataFrame.to_hdf(path_or_buf, key, kwargs)

    3. JSON文件操作

    I. 读取

    pandas.read_json(path_or_buf=None,orient=None,typ='frame',lines=False)

    • orient:指定格式,以下为参数值
      • split
      • records(最常用的格式,其他了解即可)
      • index
      • columns
      • values
    • lines:是否逐行读取,默认为False
    • typ:指定转换成的对象类型,series或者dataframe,默认为frame

    2. 写入

    pandas.to_json(path_or_buf=None,orient=None,typ='frame',lines=False)

    相关文章

      网友评论

        本文标题:Pandas

        本文链接:https://www.haomeiwen.com/subject/xzzlpqtx.html