美文网首页
[python][科学计算][pandas]简要使用教程1-数据

[python][科学计算][pandas]简要使用教程1-数据

作者: jiedawang | 来源:发表于2019-03-18 13:18 被阅读0次

    最后一次更新日期: 2019/3/21

    pandas是基于numpy的数据分析库,提供一些更易用的数据模型和大量高效的统计方法。

    使用前先导入模块:
    import pandas as pd
    按需导入以下模块:
    import numpy as np
    import matplotlib.pyplot as plt

    1. 索引Index

    numpy中只有位置索引,而pandas还增加了标签索引,依赖于一个专用的Index类型。

    常规索引
    In [64]: pd.Index([1,2,3])
    Out[64]: Int64Index([1, 2, 3], dtype='int64')
    
    In [65]: pd.Index([1.,2.,3.])
    Out[65]: Float64Index([1.0, 2.0, 3.0], dtype='float64')
    
    In [66]: pd.Index(['a','b','c'])
    Out[66]: Index(['a', 'b', 'c'], dtype='object')
    
    In [67]: pd.Index(range(10))
    Out[67]: RangeIndex(start=0, stop=10, step=1)
    
    In [68]: pd.Index(range(10)).values
    Out[68]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)
    
    In [80]: import datetime as dt
        ...: dt1=dt.datetime.now()
        ...: dt2=dt1+dt.timedelta(days=1)
    
    In [81]: pd.Index([dt1,dt2])
    Out[81]: DatetimeIndex(['2019-03-09 20:56:14.644159', '2019-03-10 20:56:14.644159'], dtype='datetime64[ns]', freq=None)
    

    Index在创建时会根据传入数据(一维序列)自动生成具体的索引类型,也可通过dtype参数指定类型,但无法正常转换时会报错;copy参数指定创建索引时是否复制源数据,默认false
    具体的索引类型也可通过各自的方法创建。
    Index.values可以查看作为数据基础的一维数组,Index.dtype可以查看数据类型。

    多级索引

    pandas提供了多级索引以便于分组数据,可用于构造高维数据集,groupby计算也会自动产生多级索引。

    In [5]: midx=pd.MultiIndex(levels=[['a','b'],['c','d']],labels=[[1,1,0,0],[0,1,0,1]],name=['idx1','idx2'])
    
    In [6]: midx
    Out[6]: 
    MultiIndex(levels=[['a', 'b'], ['c', 'd']],
               labels=[[1, 1, 0, 0], [0, 1, 0, 1]],
               names=['idx1', 'idx2'])
    
    In [9]: midx.set_labels([1,0,1,0],level=1)
    Out[9]: 
    MultiIndex(levels=[['a', 'b'], ['c', 'd']],
               labels=[[1, 1, 0, 0], [1, 0, 1, 0]],
               names=['idx1', 'idx2'])
    
    In [11]: midx.swaplevel(0,1)
    Out[11]: 
    MultiIndex(levels=[['c', 'd'], ['a', 'b']],
               labels=[[0, 1, 0, 1], [1, 1, 0, 0]],
               names=['idx2', 'idx1'])
    
    In [12]: pd.MultiIndex.from_arrays([['a','a','b','b'],['c','d','c','d']],names=['idx1','idx2'])
    Out[12]: 
    MultiIndex(levels=[['a', 'b'], ['c', 'd']],
               labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
               names=['idx1', 'idx2'])
    

    MultiIndex的第一个参数levels是每个级别的唯一标签列表,是一个两层嵌套的序列,外层对应级别,内层对应唯一标签;
    第二个参数labels是所有记录在每个级别上选取的标签序号,也是一个两层嵌套的序列,外层对应级别,内层对应记录,新版本中已被codes参数取代;
    第四个参数names是每个级别的名称。

    MultiIndex提供了一些辅助方法,set_levelsset_labelsset_names可以设置整体或是某一级别的索引属性,通过level参数指定级别,默认设置整体;
    swaplevel可以交换级别,droplevel可以删除级别,sortlevel可以对指定级别排序;
    from_arrayfrom_tuplesfrom_productfrom_frame方法可从其他结构的数据中创建索引。

    2. 数据序列Series

    In [99]: s=pd.Series([1,2,3,4],name='s1')
    
    In [100]: s
    Out[100]: 
    0    1
    1    2
    2    3
    3    4
    Name: s1, dtype: int64
    
    In [101]: pd.Series([[1,2],[3,4]],index=['row1','row2'])
    Out[101]: 
    row1    [1, 2]
    row2    [3, 4]
    dtype: object
    
    In [102]: s.dtype
    Out[102]: dtype('int64')
    
    In [103]: s.name
    Out[103]: 's1'
    
    In [104]: s.values
    Out[104]: array([1, 2, 3, 4], dtype=int64)
    
    In [105]: s.index
    Out[105]: RangeIndex(start=0, stop=4, step=1)
    
    In [106]: s.shape
    Out[106]: (4,)
    

    核心数据模型其一,由序列名name、标签索引index、值数组(一维)values组成。用于存放一维数据,只有一个轴方向:0,shape属性可以查看数据集的形状。

    创建时只能接收一维序列数据(list,tuple,ndarray),超过一维的将后面的维度看作元素的维度,会根据传入的数据自动判断类型,也可通过dtype参数显示指定。

    默认情况下会生成范围索引,可通过index参数指定一个一维序列作为索引,也可在创建后直接为index属性赋值。

    3. 数据框DataFrame

    In [107]: df=pd.DataFrame([[1,'a'],[2,'b']],columns=['col1','col2'])
    
    In [108]: df
    Out[108]: 
       col1 col2
    0     1    a
    1     2    b
    
    In [113]: df.dtypes
    Out[113]: 
    col1     int64
    col2    object
    dtype: object
    
    In [114]: df.index
    Out[114]: Int64Index([1, 2], dtype='int64', name='col1')
    
    In [116]: df.columns
    Out[116]: Index(['col1', 'col2'], dtype='object')
    
    In [117]: df.values
    Out[117]: 
    array([[1, 'a'],
           [2, 'b']], dtype=object)
    
    In [125]: df.col2
    Out[125]: 
    col1
    1    a
    2    b
    Name: col2, dtype: object
    
    In [126]: pd.DataFrame({'col1':[1,3],'col2':['a','b']})
    Out[126]: 
       col1 col2
    0     1    a
    1     3    b
    
    In [127]: df.shape
    Out[127]: (2, 2)
    

    核心数据模型其二,也就是数据表,由列标签索引columns、行标签索引index、值数组(二维)values组成。用于存放二维数据,有两个轴方向:0和1,对应行坐标和列坐标,shape属性可以查看数据集的形状。列数据的访问可以通过与列名相同的属性名访问,仅在定义了字符串列名时可用,一个单列即是一个Series

    创建时只能接收二维序列数据(list,tuple,ndarray),超过二维的将后面的维度看作元素的维度,会根据传入的数据自动判断类型,也可通过dtype参数显示指定,与numpy不太一样的是,DataFrame的列可以定义不同的数据类型,通过创建时的自动判断,或是筛选出列后转换类型,DataFrame.dtypes属性可查看所有列的数据类型。相比numpy,pandas的DataFrame创建还增加了对dict数据源的支持,key对应列名,value对应列数据。

    默认情况下会生成范围索引,可通过index参数指定一个一维序列作为索引,也可在创建后直接为index属性赋值,DataFrame.set_index方法可以返回替换了索引的数据框副本而不影响原数据。

    DataFrame相当于Series的堆叠,沿DataFrame的行或列方向进行宽度为1的切片,得到的就是一个Series

    原本pandas还提供了三维的数据模型Panel,但新版中已经废弃,可尝试使用多级索引MultiIndex来构造更高维度的数据集。

    4. 分类数据Categorical

    pandas提供了分类数据类型用于约束此类数据,该类型会限制分类标签的取值,并可为分类标签提供排序依据。

    In[14]: pd.Categorical(['a','b','b','c'],categories=['a','b'],ordered=True)
    Out[14]: 
    [a, b, b, NaN]
    Categories (2, object): [a < b]
    
    In[15]: pd.Categorical(['a','b','b','c'])
    Out[15]: 
    [a, b, b, c]
    Categories (3, object): [a, b, c]
    

    第一个参数values为所有分类标签的序列;
    第二个参数categories为唯一分类标签的序列,当指定该参数后,values中不属于categories的标签会被替换为NaN,不指定时会根据values自动生成;
    第三个参数ordered声明唯一分类标签是否指示排序方式,为True时会按categories中的顺序对标签标定大小关系,默认False

    相关文章

      网友评论

          本文标题:[python][科学计算][pandas]简要使用教程1-数据

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