【数据分析与智能计算】第三章: Pandas库、Series和DataFrame

一、Pandas库

在这里插入图片描述
与我们之前用到的NumPy库以及我们之后会用到的Matplotlib等库一样,Pandas库也是一个被大家广泛使用的一个第三方库。大家主要用它来进行数据分析的操作,这也是为什么我们这门课要来学习它的原因之一。

在Pandas库中我们经常会跟它其中的两种数据类型打交道:SeriesDataFrame。相比于我们上一章学习的数组SeriesDataFrame最明显的特点在于它们拥有行/列索引,这使得我们处理数据变得更方便。


二、DataFrame对象

我们变换一下讲解的思路,我们先来讲DataFrame对象。

DataFrame对象我们可以直观地理解为一张表格:
在这里插入图片描述
我们可以从上图看到,相较于光秃秃的只有数据本身的array类型来说,DataFrame类型额外拥有了行/列索引,这就给我们提供了额外的信息,也为我们之后处理数据带来了更多的便利。


三、Series对象

如果已经理解了DataFrame,那么Series对象就很容易理解了。Series对象可以看做是DataFrame对象的退化,它有且仅能有一列数据。如果我们把DataFrame的一列切出来,那么它就“退化”为了Series对象。

不过需要注意的是Series和“只有一列的DataFrame”对象还是有所不同的:
在这里插入图片描述


四、常用操作

0. 导入库

import pandas as pd

1. 创建DataFrame

形如:my_df = pd.DataFrame(数据本体, columns=列索引, index=行索引),其中数据本体应为二维数组(列表);列索引应为一维数组(列表);行索引应为一维数组(列表)。如:

my_df = pd.DataFrame([[1,2,3,],[4,5,6]],columns=['a','b','c'],index=['x','y'])

生成的DataFrame如下:
在这里插入图片描述

2. 从文件中读取并生成DataFrame

  1. 读取CSV文件:pd.read_csv('文件地址')
  2. 读取Excel文件:pd.read_excel('文件地址')

'文件地址'为必填参数外,还有以下几个比较常用的关键字参数

参数作用
sep = ‘,’读取在CSV文件时指定分隔符为,
header = None参数为None表明文件中第一行不是列索引
names = [ ‘a’, ‘b’, ‘c’ ]列表,定义列索引 (如果不使用文件中第一行为列索引)
index_col = 0指定文件中第0列为行索引
skiprows=[0, 2, 3]跳过文件中的0 2 3
nrows=5读取文件中的前5

3. DataFrame的切片

正因为DataFrame多了行/列索引这个东西,所以我们有两种切片的方式:

  1. 基于位置序号切片。说白了就是告诉程序我要切第几行第几列
    形如my_df.iloc[ indexList, colList ]。其中indexListcolList是里面装有整数的列表

  2. 基于行/列索引名切片。说白了就是告诉程序我要切名字是xxx的那一行/列
    形如my_df.loc[ indexList, colList ]。其中indexListcolList是里面装有字符串的列表

更多有关的数组的切片和DataFrame的切片的异同,可以参考【Numpy Pandas】ndarray与DataFrame切片时的异同(二次切片)

4. DataFrame的条件筛选

我们所谓的数据筛选其实都只不过是以布尔型数组为载体的按位置切片。所以也会有my_df.iloc[ ]my_df.loc[ ]两种形式。

我们以一个例子来说明DataFrame的条件筛选:

我们有一个DataFrame叫做students

ageheightweight
11917068
22016565
31817565

我们要选取大于身高170的同学

students['height']>=170
1     True
2    False
3     True
Name: height, dtype: bool

可以看到,当一个DataFrame的一列(实际上就是一个Series对象)和一个逻辑运算的时候,会返回一个形状一样的布尔型Series


我们将此运算得到的Series对象赋值给mask

mask = students['height']>=170 

然后就可以再用.iloc[ ].loc[ ]选取想要的列,如:

students.iloc[list(mask),[1,2]] #条件筛选行+按位置号切片列
heightweight
117068
317565
students.loc[list(mask), ['height', 'weight']] #条件筛选行+按列名切片列
heightweight
117068
317565

有一个细节需要注意,当我们使用.loc[ ]进行筛选的时候,第一个参数可以是布尔型列表或者布尔型Series;而我们使用.iloc[ ]进行筛选的时候,第一个参数必须是布尔型列表。这就是为什么上面的代码中我用了list(mask)强制类型转换。


五、总结

这一篇博客简要地介绍了Pandas库及其Series和DataFrame对象,介绍了Series和DataFrame之间的关联。

其实DataFrame对象还是比较好理解的,毕竟它和我们日常生活中接触的各类表格很像。

我们还整理了常用的一些操作,如:创建对象、读取文件、切片、条件筛选等。


如果你正在学习/复习“数据分析与智能计算”这门课,或者是想要入门大数据、人工智能的同学,欢迎订阅本专栏~
觉得有用的话,不要忘了点赞、关注、分享哦~大家多多包涵,有任何问题欢迎指正、讨论。
本文基于CC-BY-NC-SA 4.0协议,请规范转载。
(博客看累了?去我的B站瞧一瞧?)

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值