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]