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 教程

posted @ 2021-03-12 09:53  乌漆WhiteMoon  阅读(50125)  评论(0编辑  收藏  举报