zoukankan      html  css  js  c++  java
  • 【学习】pandas 基础介绍说明 【pandas】

    本文来源于《利用python进行数据分析》中文版,大家有兴趣可以看原版,入门的东西得脚踏实地哈

    1、pandas 数据结构介绍

    首先熟悉它的两个主要数据结构,Series 和 DataFrame

    Series 是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签组成。

    obj = pd.Series([4, 7, -5, 3])
    
    obj
    Out[4]: 
    0    4
    1    7
    2   -5
    3    3
    dtype: int64

    Series字符串表现形成为:索引在左,值在右,可以通过Series的values和index属性获取其数组表示形式和索引对象

    obj.values
    Out[5]: array([ 4,  7, -5,  3], dtype=int64)
    obj.index
    Out[6]: RangeIndex(start=0, stop=4, step=1)

    对各个数据点进行标记索引

    obj2 = pd.Series([4, 7], index =['d', 'b'])
    
    obj2
    Out[8]: 
    d    4
    b    7
    dtype: int64

    Numpy数组运算会保留索引和值之间的链接

    还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。

    如果数据被存入在一个python字典中,也可以直接通过这个字典来创建Series

    sdata = {'name1': 'tom', 'name2': 'Jerry'}
    
    obj3 = pd.Series(sdata)
    
    obj3
    Out[11]: 
    name1      tom
    name2    Jerry
    dtype: object

    如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)

    states = ['name1', 'name2', 'name3']

    obj4 = pd.Series(sdata, index = states)

    obj4
    Out[17]:
    name1      tom
    name2    Jerry
    name3      NaN
    dtype: object
    #注意找不到是直接变为NaN

    pandas 的isnull 和 notnull 函数可用于检测缺失数据

    对于许多应用而言, Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。

    Series的索引可以通过赋值的方式就地修改

    ==========================================================================================

    DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同中的值类型(数值、字符串、布尔值等)。DataFrame即有行索引也有列索引,它可以被看做由Series

    组成的字典(共用同一索引)。DataFrame中面向行和列的操作基本上是平衡的。其实DataFrame中的数据是以一个或多个二维块存放的,而不是列表、字典或别的一维数据结构。

    注意:虽然DataFrame是以二维结构保存数据的,但你仍然可以轻松地将其表示为更高维度的数据,层次 化索引的表格型结构,这是pandas中许多高级数据处理功能的关键要素

    构建DataFrame的办法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典:

    结果dataframe会自动加上索引,且全部列会被有序排列:

    data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
            'year': [2000, 2001, 2002, 2001, 2002],
            'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
    
    frame = pd.DataFrame(data)
    
    frame
    Out[20]: 
       pop   state  year
    0  1.5    Ohio  2000
    1  1.7    Ohio  2001
    2  3.6    Ohio  2002
    3  2.4  Nevada  2001
    4  2.9  Nevada  2002

     如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列:

    pd.DataFrame(data, columns = ['year', 'state', 'pop'])
    Out[21]: 
       year   state  pop
    0  2000    Ohio  1.5
    1  2001    Ohio  1.7
    2  2002    Ohio  3.6
    3  2001  Nevada  2.4
    4  2002  Nevada  2.9

    这个非常重要,数据分析中经常用到,也可以pd.DataFrame(data, columns = ['year', 'state''])只取两列

    pd.DataFrame(data, columns = ['year', 'state'])
    Out[22]: 
       year   state
    0  2000    Ohio
    1  2001    Ohio
    2  2002    Ohio
    3  2001  Nevada
    4  2002  Nevada

    跟Series一样,如果传入的列在数据中找不到,就会产生NA值:

    frame2 = pd.DataFrame(data, columns = ['year', 'state', 'pop', 'debt'], index = ['one', 'two', 'three', 'four', 'five'])
    
    frame2
    Out[26]: 
           year   state  pop debt
    one    2000    Ohio  1.5  NaN
    two    2001    Ohio  1.7  NaN
    three  2002    Ohio  3.6  NaN
    four   2001  Nevada  2.4  NaN
    five   2002  Nevada  2.9  NaN
    frame2.columns
    Out[27]: Index(['year', 'state', 'pop', 'debt'], dtype='object')

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

    frame2['state']
    Out[28]: 
    one        Ohio
    two        Ohio
    three      Ohio
    four     Nevada
    five     Nevada
    Name: state, dtype: object
    
    frame2.year
    Out[29]: 
    one      2000
    two      2001
    three    2002
    four     2001
    five     2002
    Name: year, dtype: int64
    frame2.ix['three']
    Out[30]: 
    year     2002
    state    Ohio
    pop       3.6
    debt      NaN
    Name: three, dtype: object

    列可以通过赋值的方式进行修改

    frame2['debt'] = 16.5
    
    frame2
    Out[32]: 
           year   state  pop  debt
    one    2000    Ohio  1.5  16.5
    two    2001    Ohio  1.7  16.5
    three  2002    Ohio  3.6  16.5
    four   2001  Nevada  2.4  16.5
    five   2002  Nevada  2.9  16.5
    frame2['debt'] = np.arange(5)
    
    frame2
    Out[35]: 
           year   state  pop  debt
    one    2000    Ohio  1.5     0
    two    2001    Ohio  1.7     1
    three  2002    Ohio  3.6     2
    four   2001  Nevada  2.4     3
    five   2002  Nevada  2.9     4

    将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值

    val = pd.Series([-1.2, -1.5, -1.7], index = ['two', 'four', 'five'])
    
    frame2['debt'] = val
    
    frame2
    Out[38]: 
           year   state  pop  debt
    one    2000    Ohio  1.5   NaN
    two    2001    Ohio  1.7  -1.2
    three  2002    Ohio  3.6   NaN
    four   2001  Nevada  2.4  -1.5
    five   2002  Nevada  2.9  -1.7

    为不存在的列赋值会创建出一个新列。关键字del用于删除列:

    frame2['eastern'] = frame2.state == 'Ohio'
    
    frame2
    Out[41]: 
           year   state  pop  debt eastern
    one    2000    Ohio  1.5   NaN    True
    two    2001    Ohio  1.7  -1.2    True
    three  2002    Ohio  3.6   NaN    True
    four   2001  Nevada  2.4  -1.5   False
    five   2002  Nevada  2.9  -1.7   False
    del frame2['eastern']
    
    frame2.columns
    Out[43]: Index(['year', 'state', 'pop', 'debt'], dtype='object')

    输入给DataFrame构造器的数据,列出了构造函数所能接受的各种数据

    如果设置了DataFrame的index和columns的name属性,则这些信息也会被显示出来

    跟Series一样, values属性也会以二维ndarray的形式返回DataFrame中的数据:

    如果DataFrame各列的数据类型不同,则值数组的数据类型就会选用能兼容所有列的数据类型

    2、索引对象

    pandas的索引对象负责管理轴标签和其他元数据,构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个index

    obj = pd.Series(range(3), index = ['a', 'b', 'c'])
    
    index = obj.index
    
    index
    Out[46]: Index(['a', 'b', 'c'], dtype='object')

    index对象是不可修改的,因此用户不能对其进行修改

    不可修改性非常重要,因为这样才能使index对象在多个数据结构之间安全共享

    index = pd.Index(np.arange(3))
    obj2 = pd.Series([1.5, - 2.5, 0], index = index)
    
    obj2.index is index
    Out[48]: True

    注意:虽然大部分用户都不需要知道太多关于Index对象的细节,但它们确实是pandas数据模型的重要组成部分

    pandas中主要的index对象

    每个索引都有一些方法和属性,它们可用于设置逻辑并回答有关该索引所包含的数据的常见问题

    Index 的方法和属性

     
  • 相关阅读:
    (三)RabbitMQ:客户端开发向导
    (二)RabbitMQ:RabbitMQ相关概念介绍
    (一)RabbitMQ:RabbitMQ初体验
    支付宝手机网站支付接入(沙箱环境)
    vue-cli3.0 的使用
    Windows平台上好用的SSH客户端
    JWT
    cnetos 安装nginx后查找nginx配置文件路径
    centos搭建nginx服务,给某个目录及子目录nginx的读取权限
    windows下mysqldump.exe、mysql.exe导出mysql数据到sql文件
  • 原文地址:https://www.cnblogs.com/yizhenfeng/p/7486206.html
Copyright © 2011-2022 走看看