Python Pandas 库:Series、DataFrame 对象

Pandas#

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

Pandas 安装并使用#

安装#

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

Copy Highlighter-hljs
pip install pandas

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

使用#

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

Copy Highlighter-hljs
import numpy as np import pandas as pd

Series 对象#

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

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

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

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

Copy Highlighter-hljs
s = pd.Series()

Series 对象创建#

用 list 创建#

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

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

用 dict 创建#

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

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

用 ndarray 创建#

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

Copy Highlighter-hljs
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 参数的数据元素数量相同,且每个数据元素的都是改标量。

Copy Highlighter-hljs
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 属性,该属性可以给出对象的名字。下面是访问这些属性的样例:

Copy Highlighter-hljs
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 对象的数据元素个数

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

Copy Highlighter-hljs
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 对象中的元素:

Copy Highlighter-hljs
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


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

Copy Highlighter-hljs
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 表达式,此时将回显所有符合筛选条件的元素。例如:

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

DataFrame#

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

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

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

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

Copy Highlighter-hljs
df = pd.DataFrame()

DataFrame 对象创建#

用 list 创建#

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

Copy Highlighter-hljs
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),这种方法的简单样例如下。

Copy Highlighter-hljs
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),这种方法的简单样例如下。

Copy Highlighter-hljs
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 对象创建的样例。

Copy Highlighter-hljs
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 对象形式返回所有数据元素

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

Copy Highlighter-hljs
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 转置行和列

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

Copy Highlighter-hljs
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 对象对列的各种操作和字典类似,使用索引对某一列进行访问,同时可以用类似字典的语法对列进行增加和删除。例如下面是简单的样例:

Copy Highlighter-hljs
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 方法的样例:

Copy Highlighter-hljs
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 方法的样例:

Copy Highlighter-hljs
df.iloc[0] df.iloc[1:2] df.iloc[1:2,[0]] df.iloc[1:2,[0,1]]


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

Copy Highlighter-hljs
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 表达式,此时将回显所有符合筛选条件的元素。例如:

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

参考资料#

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

posted @   乌漆WhiteMoon  阅读(50646)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示
CONTENTS