• Python Pandas 库:Series、DataFrame 对象


    Pandas

    Pandas 是基于 NumPy 的分析结构化数据的工具集,它用于数据挖掘和数据分析,同时也提供数据清洗功能。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas 库有 2 个主要的工具,分别是 DataFrame 对象和 Series 对象。可以进入 Pandas 官网Pandas 中文文档做进一步了解。

    Pandas 安装并使用

    安装

    在 cmd 命令下输入命令,等待安装完成即可。

    pip install pandas
    

    Anaconda 环境下配置就很简单了,找到 Pandas 库勾上就行,默认是启用的。

    使用

    想要使用 Pandas 库,就需要把 Numpy 和 Pandas 库都包含进来,代码如下。一般为了简化 Pandas 库的调用,约定俗成把 Pandas 简化为 pd。

    import numpy as np
    import pandas as pd
    

    Series 对象

    Series 对象可以认为是自动索引的一维数组,支持对 int、float、string 和各种对象等类型的数据存储。Series 对象的最大特点就是每一个数据元素,都有一个索引与之对应。

    Series 对象的构造函数如下,参数的说明由表格所示:

    pd.Series(data, index, dtype)
    
    参数 说明
    data 填充进 Series 对象的数据,支持多种数据类型
    index 索引值,与 data 的长度相同,默认为 np.arange(n)
    dtype 数据元素的数据类型

    其中 data 可以是多种数据类型,例如 list、dict、ndarray 和标量等。例如如下代码将创建一个空的 Series 对象:

    s = pd.Series()
    

    Series 对象创建

    用 list 创建

    如下代码使用 list 来初始化 Series 对象,其中第一个 Series 对象的索引是默认值,第二个 Series 为另一个 list 的值。

    alist = [1,2,3,4,5]
    s = pd.Series(alist)
    s = pd.Series(alist, ['a','b','c','d','e'])
    

    用 dict 创建

    如下代码使用 dict 来初始化 Series 对象,字典的“键”将成为“值”的索引。

    adict = {'a': 0, 'b': 1, 'c': 2}
    s = pd.Series(adict)
    

    用 ndarray 创建

    如下代码使用 ndarray 来初始化 Series 对象,其中第一个 Series 对象的索引是默认值,第二个 Series 为另一个 ndarray 的值。

    a = np.arange(5, dtype = int)
    s = pd.Series(a)
    s = pd.Series(a, np.arange(1, 10, 2))
    

    用标量创建

    如下代码使用标量来初始化 Series 对象,当没有给定 index 参数时 Series 对象仅有 1 个数据元素。当给定 index 参数时,Series 对象的数据元素数量与 index 参数的数据元素数量相同,且每个数据元素的都是改标量。

    s = pd.Series(7)
    s = pd.Series(7, ['a','b','c','d','e'])
    

    Series 对象属性

    Series 对象和 dict 有一定的相似性,它有 .index 和 .values 两个属性。index 属性存储了 Series 对象的索引集合,values 属性存储了 Series 对象的数据集合,二者都是以 ndarray 对象存在。同时 Series对象本身和 index 属性都有一个 .name 属性,该属性可以给出对象的名字。下面是访问这些属性的样例:

    s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
    s.name = "Series 对象样例"
    s.index.name = "Series 对象样例索引"
    s
    s.name
    s.index
    s.index.name
    s.values
    


    Series 对象还有一些属性,如下表格所示。

    属性 说明
    dtype 数据元素的数据类型
    empty Series 对象是否为空,为空返回 True
    ndim Series 对象的维度
    size Series 对象的数据元素个数

    查看这些属性的简单样例如下:

    s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
    s.dtype
    s.empty
    s.ndim
    s.size
    

    Series 对象操作

    Series 对象的操作和 ndarray 对象的操作有一定的相似之处,同时和 dict 类型也有一定的相似之处。即 Series 对象即可以用下标对数据元素进行访问和修改,也可以使用索引去访问对应的值。除了使用索引进行访问,也可以使用 get() 方法访问数据,Series 对象也支持 in 操作符确定索引是否存在。
    如下样例分别使用下标、索引和 get() 方法访问 Series 对象中的元素:

    s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
    s[0]
    s[1:]
    s[:-2]
    s['a']
    s.get(1)
    s.get('b')
    'a' in s
    1 in s
    


    也可以通过上述方法对数据元素进行修改:

    s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
    s[0] = 6
    s[1:] = 7
    s[:-2] = 8
    s['a'] = 9
    


    同时 Series 对象支持 bool 索引,也就是说访问元素的中括号内可以是一个 bool 表达式,此时将回显所有符合筛选条件的元素。例如:

    s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
    s[s > 2] 
    

    DataFrame

    DataFrame 是由多种类型的列构成的二维标签数据结构,是一个类似于 Excel 或 SQL 数据库表的表格型的数据类型。DataFrame 既有行索引 index、也有列索引 columns,常用于表达二维数据或多维数据。

    DataFrame 对象的构造函数如下,参数的说明由表格所示:

    pandas.DataFrame( data, index, columns, dtype)
    
    参数 说明
    data 填充进 DataFrame 对象的数据,支持多种数据类型
    index 行索引,默认值为 np.arrange(n)
    columns 列索引,默认值为 np.arrange(n)
    dtype 每列的数据类型

    其中 data 可以是多种数据类型,例如 list、dict、ndarray 和 Series、DataFrame。例如如下代码将创建一个空的 Series 对象:

    df = pd.DataFrame()
    

    DataFrame 对象创建

    用 list 创建

    如下代码使用 list 创建 DataFrame 对象,其中第一个样例创建的 DataFrame 对象有 1 个 column,第二个样例在前者的基础上给定了航索引和列索引。第三个样例有 2 个column,这种方式可以扩展到更多的维度。

    df = pd.DataFrame([1,2,3,4,5],dtype=float)
    df = pd.DataFrame([1,2,3,4,5],['a','b','c','d','e'],['id'])
    alist = [[1,'Python'],[2,'Java'],[3,'C++']]
    df = pd.DataFrame(alist,columns=['Id','Language'])
    

    用 dict 创建

    用字典创建 DataFrame 对象的方式有 2 种,第一种是列表字典(dict 的每个元素都是 list),这种方法的简单样例如下。

    df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']})
    alist = ['a','b','c']
    df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},alist)
    


    第二种是字典列表(list 的每个元素都是 dict),这种方法的简单样例如下。

    alist = [{'Id': 1, 'Language': 'Python'},{'Id': 2, 'Language': 'Java'},{'Id': 2, 'Language': 'C++'}]
    df = pd.DataFrame(alist)
    df = pd.DataFrame(alist,['a','b','c'])
    

    用 ndarray 创建

    可以用 ndarray 字典来创建,如下样例分别是一维 ndarray 对象和二维 ndarray 对象创建的样例。

    df = pd.DataFrame(np.arange(6))
    df = pd.DataFrame(np.arange(6).reshape(2,3))
    

    DataFrame 对象属性

    DataFrame 对象也有属性,以下 3 个属性可以分别获取 DataFrame 对象的所有行索引、列索引和数据元素。

    属性 说明
    index DataFrame 对象的所有行索引
    columns DataFrame 对象的所有列索引
    values 以 ndarray 对象形式返回所有数据元素

    如下是访问这些属性的样例:

    df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
    df.index
    df.columns
    df.values
    


    DataFrame 对象还有一些属性,如下表格所示。

    属性 说明
    dtypes 数据元素的数据类型
    empty DataFrame 对象是否为空,为空返回 True
    ndim DataFrame 对象的维度
    shape 返回一个元组描述 DataFrame 对象的形状
    size DataFrame 对象的数据元素个数
    T 转置行和列

    查看这些属性的简单样例如下:

    df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
    df.dtypes
    df.empty
    df.ndim
    df.shape
    df.size
    df.T
    

    DataFrame 对象操作

    对列进行操作

    DataFrame 对象对列的各种操作和字典类似,使用索引对某一列进行访问,同时可以用类似字典的语法对列进行增加和删除。例如下面是简单的样例:

    df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
    df['Language']
    df['text'] = pd.Series([6,7,8],index = ['a','b','c'])
    del df['text']
    

    访问和切片行

    DataFrame 对象对行的各种访问可以用 loc 方法或 iloc 方法进行访问。

    方法 说明
    loc[index[,column]] 访问索引 index 所在的行的数据,column 用于控制返回的列
    iloc[idx] 访问下标 idx 所在的行的数据,column 用于控制返回的列

    例如下面是 loc 方法的样例:

    df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
    df.loc['a']
    df.loc[:'b']
    df.loc['b':'c']
    df.loc['b':'c', ['Id']]
    df.loc['b':'c', ['Id','Language']]
    


    例如下面是 iloc 方法的样例:

    df.iloc[0]
    df.iloc[1:2]
    df.iloc[1:2,[0]]
    df.iloc[1:2,[0,1]]
    


    对于行的切片,可以使用中括号指定下标进行切片。例如下面是简单的样例:

    df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
    df[1:]
    df[:-1]
    df[0:1]
    

    bool 索引

    DataFrame 对象支持 bool 索引,也就是说访问元素的中括号内可以是一个 bool 表达式,此时将回显所有符合筛选条件的元素。例如:

    df = pd.DataFrame(np.arange(6).reshape(2,3))
    df[df > 2]
    

    参考资料

    Pandas 官网
    Pandas 中文文档
    极客教程:Pandas 教程

  • 相关阅读:
    读写csv文件
    安卓跳转
    求时间精确到秒的数
    航空公司客户价值分析
    利用LM神经网络和决策树去分类
    拉格朗日插值法
    ID3
    K最近邻
    贝叶斯分类
    FilterDispatcher已被标注为过时解决办法
  • 原文地址:https://www.cnblogs.com/linfangnan/p/14520302.html
Copyright © 2020-2023  润新知