zoukankan      html  css  js  c++  java
  • pandas(零)数据结构

    pandas的两个主要的数据结构:

    Series

    series是一种类似于一维数组的对象,它由一组数据(NumPy数组类型的数据)和一组与之相关的数据标签(索引)组成。

    1 from pandas import Series
    2 
    3 obj = Series((1,2,3,4,5))
    4 obj.index #索引,默认从0开始的整数
    5 obj.values #array数组
    6 
    7 #自定义索引的Series
    8 obj_with_index = Series([4,65,3,4],index=['a','b','c','d'])
    9 print(obj_with_index)

    可以通过索引的方式选取或修改单个或一组值

     1 >>> from pandas import Series
     2 >>> obj = Series([1,2,3,4],index=('a','b','c','d'))
     3 >>> obj
     4 a    1
     5 b    2
     6 c    3
     7 d    4
     8 dtype: int64
     9 >>> obj['a']
    10 1
    11 >>> obj['c'] = 8
    12 >>> obj
    13 a    1
    14 b    2
    15 c    8
    16 d    4
    17 
    18 >>> obj[('a','b','d')] = (11,12,14)
    19 >>> obj
    20 a    11
    21 b    12
    22 c     8
    23 d    14
    24 dtype: int64
    25 >>>

    对其对象进行NumPy运算的时候会保留索引和值之间的链接

    >>> obj -2
    a     9
    b    10
    c     6
    d    12
    dtype: int64
    >>> obj[obj > 10]
    a    11
    b    12
    d    14
    dtype: int64
    >>>

    还可以将Series对象看成一个定长的有序的字典,一个索引和值组成的键值对的映射。

    可以应用在很多需要字典参数的函数中,例如函数的关键字参数

    利用字典作为参数生成一个自定义索引的Series对象

    >>> metadata = {"a":1,"b":2,"c":3}
    >>> data= Series(metadata)
    >>> data
    a    1
    b    2
    c    3
    dtype: int64

    根据索引去建对象,如果字典的键中没有在索引中,则不会创建该索引-值的映射,索引不在字典的键中,则会对该索引创建一个Nan值(表示缺失或NA值)

    可以利用isnull和notnull去判断是不是Nan值

    >>> states = ['b','c','d','e']
    >>> obj4 = Series(metadata,index = states)
    >>> obj4
    b    2.0
    c    3.0
    d    NaN
    e    NaN
    dtype: float64
    
    >>> import pandas as pd
    >>> pd.isnull(obj4)
    b    False
    c    False
    d     True
    e     True
    dtype: bool
    >>> pd.notnull(obj4)
    b     True
    c     True
    d    False
    e    False
    dtype: bool
    #series对象本身就有isnull和notnull方法
    >>> obj4.isnull()
    b    False
    c    False
    d     True
    e     True
    dtype: bool
    >>> obj4.notnull()
    b     True
    c     True
    d    False
    e    False
    dtype: bool

    Series一个最重要的功能就是在算术运算中会自动对齐索引。

    Series对象及其索引都有一个name属性

    dtype: bool
    >>> obj4.name ="numpy_array"
    >>> obj4.index.name = 'letter'
    >>> obj4
    letter
    b    2.0
    c    3.0
    d    NaN
    e    NaN
    Name: numpy_array, dtype: float64

    DataFrame:

    DataFrame是一个表格型的数据结构,它含有一组有序的列,每一列可以是不同的值类型。DataFrame不仅有列索引,还有行索引。DataFrame中的数据是以一个或多个二维块存放的。

    用等长列表或NumPy数组组成的字典去创建DataFrame对象

    >>> data = {'name':['li','wang','yang','sun'],'height':[1.7,1.8,1.6,1.55],'age':[30,31,34,61]}
    >>> df_obj = DataFrame(data)
    >>> df_obj
       age  height  name
    0   30    1.70    li
    1   31    1.80  wang
    2   34    1.60  yang
    3   61    1.55   sun

    如果原始数据是嵌套的字典,会将外层字典的建作为列,内层字典的键做为行索引

    如果指定了列序列,就会按照指定的列序列的顺序进行排列,行序列会自动生成

    >>> df_obj = DataFrame(data,columns=['name','age','height'])
    >>> df_obj
       name  age  height
    0    li   30    1.70
    1  wang   31    1.80
    2  yang   34    1.60
    3   sun   61    1.55

    如果传入的列在数据中找不到也会产生Nan值

    >>> df_obj = DataFrame(data,columns=['name','age','height','weight'],index=('a','b','c','d'))
    >>> df_obj
       name  age  height weight
    a    li   30    1.70    NaN
    b  wang   31    1.80    NaN
    c  yang   34    1.60    NaN
    d   sun   61    1.55    NaN
    >>>

    可以通过字典标记的方式或属性的方式,将DataFrame的列获取为一个Series:

    >>> df_obj.columns
    Index(['name', 'age', 'height', 'weight'], dtype='object')
    >>> df_obj.name
    a      li
    b    wang
    c    yang
    d     sun
    Name: name, dtype: object
    >>> df_obj['name']
    a      li
    b    wang
    c    yang
    d     sun
    Name: name, dtype: object

    ps:在获取列的时候不仅继承了原来的索引,还将Series的name属性设置好了

    也可以给列赋值,但如何是将列表或数组赋值给某列,其长度必须跟DataFrame的长度相同,如果复制的是一个Series对象,就会根据索引去精确匹配

    >>> df_obj.weight = 200
    >>> df_obj
       name  age  height  weight
    a    li   30    1.70     200
    b  wang   31    1.80     200
    c  yang   34    1.60     200
    d   sun   61    1.55     200

    删除列用del关键字

    >>> del df_obj['weight']#注意:这里不能用列的属性,即:del df_obj.weigt是错误的
    >>> df_obj
       name  age  height
    a    li   30    1.70
    b  wang   31    1.80
    c  yang   34    1.60
    d   sun   61    1.55

    dataframe对象也可以转置

    >>> df_obj.T
              a     b     c     d
    name     li  wang  yang   sun
    age      30    31    34    61
    height  1.7   1.8   1.6  1.55

     索引对象

    index对象不能被修改,这样保证了多个数据结构能够安全共享

    创建索引对象及在Series或DataFrame中使用

    >>> index = pd.Int64Index(range(1,6))
    >>> index
    Int64Index([1, 2, 3, 4, 5], dtype='int64')
    >>> data = Series((11,22,33,44,55),index=index)
    >>> data
    1    11
    2    22
    3    33
    4    44
    5    55
    >>> index.append(pd.Index((6,)))
    Int64Index([1, 2, 3, 4, 5, 6], dtype='int64')

    pandas的索引对象

    说明
    Index  最泛化的Index对象,将轴标签表示为一个由python对象组成的NumPy数组
    Int64Index 针对整数的特殊Index
    MultiIndex 层次化索引对象,表示单个轴上的多层索引。可以看作由元组组成的数组
    DatatimeIndex 存储纳秒级时间戳
    PeriodIndex 针对Period数据(时间间隔)的特殊Index
       
       
       

    Index对象的方法与属性

    方法属性
    append 链接另一个index对象,产生一个新的Index
    diff 计算差集,并得到一个Index
    intersection 计算交集
    union 计算并集
    isin 计算一个指示各值是否都包含在参数集合中的布尔型数组
    delete 产出索引i出的元素,并得到新的Index
    drop 删除传入的值,并得到新的Index
    insert 将元素插入到索引i处,并得到新的Index
    is_monotonic 将各元素均大于等于前一个元素时,返回True
    is_unique 将Index没有重复值时,返回True
    unique 返回Index中唯一的数组
  • 相关阅读:
    vue实现短信验证码登录
    使用vue3.0和element实现后台管理模板
    vue导出excel数据表格功能
    Vue2.0-token权限处理
    vue2.0实现购物车功能
    Vue图片懒加载之lazyload插件使用
    H5 canvas 绘图
    前端常见跨域请求 方法
    Html5 @media + css3 媒体查询
    Java面试之RabbitMQ
  • 原文地址:https://www.cnblogs.com/zuoshoushizi/p/8729173.html
Copyright © 2011-2022 走看看