四、Python数据挖掘(Pandas库)

四、Python数据挖掘(Pandas库)

目录:

一、Pandas 简介

  • *Pandas是什么?

PandasNumpy 为基础,借力 Numpy 模块在计算方面性能高的优势;其次, Pandas 基于 Matplotlib,能够简便的画图; Pandas 还具有独特的数据结构

  • *为什么使用 Pandas?

Pandas 具有便捷的数据处理能力,例如上一节 三、Python数据挖掘(Numpy库)中我们知道了,通过 Numpygenfromtxt() 函数读取数据文件中的 字符串时,会出现 nan 的情况,但 Pandas 解决了这些问题,具有便捷的数据处理能力,读取文件方便,并且封装了 MatplotlibNumpy 的画图和计算

二、Pandas 三大结构之——DataFrame

对于 Numpy 中的 ndarray,它只储存数据,但不包含数据的意义,而 DataFrame 的结构上,既有 行索引,又有 列索引二维数组

可以类比于 SQL 中的一张关系表:一般 DataFrame 中行索引是指不同的事物,而列索引是指事物的属性( 重要

Pandas 一般会和 Numpy 配合着来使用

导入模块

import pandas as pd
1.DataFrame 的创建

pd.DataFrame(data, index, columns, dtype=None, copy=False)

返回 二维数组dataDataFrame 结构
index 行索引语句,数组
columns 列索引语句,数组
只返回新数组,不改变原数组

例:

四、Python数据挖掘(Pandas库)
还可以通过传入字典来定义 DataFrame

; pd.DataFrame(dict)

以字典的方式创建 DataFrame 数组
字典 key值 作为列索引

例:

四、Python数据挖掘(Pandas库)

Pandas 中的特殊索引——时间序列

pd.date_range(start=, end=, periods=, freq=, closed=None)

生成一个固定间隔时间的时间序列,可以用作 DataFrame 的索引
start= 开始日期,格式为: “2021-01-01”(不含时间)或 “2021-01-01 00:00:00”(含时间)
end= 结束日期,格式和 start= 一致
periods= 生成的时间序列的个数
freq= 频率,即时间间隔
closed= 把原输出结果输出为开/闭区间:
“closed=left” 表示输出区间为 左闭右开
“closed=right” 表示输出区间为 左开右闭

freq 频率含义D一天W一周W-SUN一周,以星期天为起始,等同于”W”W-MON一周,以星期一为起始W-TUE一周,以星期二为起始W-WED一周,以星期三为起始W-THU一周,以星期四为起始W-FRI一周,以星期五为起始W-SAT一周,以星期六为起始M一个月,以月结束为界,如:”2018-11-30″, “2018-12-31″MS一个月,以月起始为界,如:”2021-01-01”, “2021-02-01″S一秒T/min一分钟H一个小时A/Y一年,以年结束为界,如:”2020-12-31”

更详细的内容,可参考下述文章:

例:

四、Python数据挖掘(Pandas库)
专门处理时间序列的函数

; new_ = pd.to_datetime(datetime_list)

专门处理时间序列的函数,传入一个时间序列的列表,返回一个新的对象
datetime_list 时间序列列表

新对象的属性含义month时间序列列表的
月份

列表year时间序列列表的
年份

列表weekday时间序列列表的
星期

列表day时间序列列表的
日份

列表

例:

四、Python数据挖掘(Pandas库)
可以直接根据日期返回星期
2.DataFrame 的属性

属性含义shape形状index行索引columns列索引values表格内容-值

例:

四、Python数据挖掘(Pandas库)
四、Python数据挖掘(Pandas库)
四、Python数据挖掘(Pandas库)
; 3.DataFrame 重设索引

由于这些属性都是由数组构成,因此也可以进行一些访问操作

访问行索引

DataFrame数组.index[下标/start:stop]

访问 行索引,缺省时访问所有 行索引

:DataFrame 规定,不能直接通过 DataFrame数组.index[下标] = 值 单独修改某一行索引,只能整体修改

例:

四、Python数据挖掘(Pandas库)
访问列索引

; DataFrame数组.columns[下标/start:stop]

访问 列索引,缺省时访问所有 列索引

:DataFrame 规定,不能直接通过 DataFrame数组.columns[下标] = 值 单独修改某一列索引,只能整体修改

例:

四、Python数据挖掘(Pandas库)
重设行索引

new_ = DataFrame数组.reset_index(drop=False)

DataFrame 将生成新的数字顺序的行索引
drop= 决定是否删除原索引,如果 drop=False,则不删除原索引,会把原行索引加到第一列中
只返回新数组 new_ ,不改变原数组

例:

四、Python数据挖掘(Pandas库)
以某列值设置为新的索引

; new_ = DataFrame数组.set_index(keys, drop=True)

以某列的值设置为新的索引,key为某列的索引
keys 索引,可以设置 多个索引
drop 决定是否删除作为索引引用后的该列:
drop=Fales 当设置了某列的值为新的索引后,保留这一列
drop=True 当设置了某列的值为新的索引后,不保留这一列,即 列数-1
只返回新数组 new_ ,不改变原数组

  • 以某一列的值作为新的索引,可以类比于 SQL主码,规定 主码索引
  • 当设置多列作为索引时,可以类比于 SQL主码,主码可以由 *多个属性组成

例:把 “name” 作为新的行索引

四、Python数据挖掘(Pandas库)
例:设置多个行索引
四、Python数据挖掘(Pandas库)
4.其他常用方法

DataFrame数组.T

同样可以实现行和列的转置

DataFrame数组.head([num])

返回 DataFrame 数组 前 num 行的内容
num 可以指定行数,默认为5行

DataFrame数组.tail([num])

返回 DataFrame 数组 后 num 行的内容
num 可以指定行数,默认为5行

  • 后面两个方法一般用于结构的查看

访问某一行整行、某一整列或部分数据

DataFrame数组.iloc[行下标/start:stop[, start:stop]]

用于访问 DataFrrame 中所选的数据
行下标/start:stop 可以是指 行下标 所索引的行,也可以是某些行 [start:stop)
[start:stop) 列的范围,缺省时为 所有列,这个 不能是下标,但是可以通过如:[0:1] 的方式来单独访问某一列

后面会作更详细的介绍

例:

四、Python数据挖掘(Pandas库)

; 三、Pandas 三大结构之——Panel

MultiIndex 与 Panel

1.MultiIndex

MultiIndex 就是多层或分层索引对象,简单来说,在 DataFrame 具有 多列行索引时, MultiIndex 就是多列行索引对象

例:

四、Python数据挖掘(Pandas库)
  • 索引的名字分别是 name 和 *sex

例:通过 index.索引的名字 可以访问指定索引

; DataFrame数组.index.levels

显示行索引的内容

四、Python数据挖掘(Pandas库)
2.Panel

Panel 是用于存储三维数组的结构,其大致结构类似于 DataFrame

通常会把 Pnael 当作 DataFrame(数据帧) 的容器

pd.Panel(data, items, major_axis, minor_axis, copy=False, dtype=None)

返回 三维数组dataPanel 结构
data 三维数组
items – axis 0 每个项目对应于内部包含的数据帧(DataFrame)
major_axis – axis 1 它是每个数据帧(DataFrame)的 行索引
minor_axis – axis 2 它是每个数据帧(DataFrame)的
只返回新数组 new_ ,不改变原数组

  • Panel 了解即可, Panel 从版本0.20.0开始弃用:推荐的用于表示3D数据的方法是 DataFrame 上的 MultiIndex 方法

四、Pandas 三大结构之——Series

Series 可以是 DataFrame 中的某一行,视为 一维数组

它包含 索引index (0, 1, 2, 3…)值value 属性,这里的 index 指的是 Series的列索引——即一维数组的索引,而不是 DataFrame 的行索引

四、Python数据挖掘(Pandas库)
可以把 DataFrame 理解为 Series 的容器
; 1.Series 的属性

属性含义index索引values值

2.Series 的创建

pd.Series(data, index)

返回 一维数组dataSeries 结构
data 一维数组
index 索引语句,数组

例:

直接创建

四、Python数据挖掘(Pandas库)
通过 DataFrame 创建
四、Python数据挖掘(Pandas库)
  • 会沿用原 DataFrame 的列索引作为 Series 的索引

通过字典创建

四、Python数据挖掘(Pandas库)

; 五、基本数据操作

1.数据的索引/访问
(1)直接索引(先列后行)

DataFrame数组[column][index]

通过 列和行 的索引访问 DataFrame 中的值
column 列索引,可以是一个数组
index 行索引,可以是一个数组,可以缺省
注:当 column 是一个数组时,index 不能指定任何值重要
注:[ ][ ] 是先列后行,不是先行后列

DataFrame数组[start:stop]

读取下标在区间 [start, stop) 内的 无法指定列

例:

索引到某一值

四、Python数据挖掘(Pandas库)
访问整列数据
四、Python数据挖掘(Pandas库)
通过数组访问某些组合的数据
四、Python数据挖掘(Pandas库)
  • :上述情况中 column 是数组, index 不能指定任何值
    四、Python数据挖掘(Pandas库)
; (2)按标签索引(先行后列)

DataFrame数组.loc[index][column] DataFrame数组.loc[index, column]

通过 行和列 的索引访问 DataFrame 中的值,上述两种方法效果一样,都可以
index 行索引,可以是一个数组
column 列索引,可以是一个数组
loc() 不会受到 直接访问那样的限制

例:

索引到某一值

四、Python数据挖掘(Pandas库)
通过数组访问部分值
四、Python数据挖掘(Pandas库)
  • 可以配合 DataFrame数组.index[ ]DataFrame数组.columns[ ] 使用,不过没必要这样用,可以直接使用 *DataFrame数组.iloc[]
; (3)按下标索引(先行后列)

DataFrame数组.iloc[行下标/start:stop[, start:stop]]

用于访问 DataFrrame 中所选的数据
行下标/start:stop 可以是指 行下标 所索引的行,也可以是某些行 start:stop
start:stop 列的范围,缺省时为 所有列,这个 不能是下标

例:

通过 start:stop 访问部分值

四、Python数据挖掘(Pandas库)
  • 可以配合 DataFrame数组.columns.get_indexer(columns) 来使用,该方法的作用是通过 索引来获取索引所在位置的 列下标
  • 可以配合 DataFrame数组.index.get_indexer(index) 来使用,该方法的作用是通过 索引来获取索引所在位置的 *行下标

通过行下标访问部分值

四、Python数据挖掘(Pandas库)
; (4)扩展:属性访问法

列索引以字母为开头时, 列索引就是该 DataFrame/Series数组 的属性,可以用访问属性的方法来访问列

例:

四、Python数据挖掘(Pandas库)
2.数据的赋值

可以进行整体赋值,也可以单独赋值

访问需要修改的值 = 值

可以实现整体赋值或单独赋值

例:

四、Python数据挖掘(Pandas库)
:这个方法还可以为 DataFrame/Series数组 增加新的行或列

例:

四、Python数据挖掘(Pandas库)
  • 此时访问的索引是不存在的索引即可
; 3.排序
(1)对 DataFrame 进行排序

排序有两种形式,一种是根据 内容进行排序,一种是根据 行索引进行排序

DataFrame数组.sort_values(by=, ascending=True)

取单个列或多个列,根据这些列的内容进行排序
by 可以是某个列的索引,也可以是多个列的索引,以索引选取的列作为排序依据,如: by=[“Chinese”, “Math”],则优先根据 Chinese 索引进行排序,若 Chinese 索引值 有相等项时,再根据 Math 索引
ascending=False 降序排序
ascending=True 升序排序,默认
只返回新数组,不改变原数组

DataFrame数组.sort_index()

根据 行索引进行排序
只返回新数组,不改变原数组

例:

四、Python数据挖掘(Pandas库)
; (2)对 Series 进行排序

由于 Series 是一个一维数组,因此较简单

Series数组.sort_values(ascending=True)

根据 Series 数组内容进行排序
ascending=False 降序排序
ascending=True 升序排序,默认
只返回新数组,不改变原数组

Series数组.sort_index()

根据 索引进行排序
只返回新数组,不改变原数组

4.算术运算与逻辑运算
(1)算术运算

直接进行运算

访问要进行运算的值 运算式

可以直接进行运算

例:

四、Python数据挖掘(Pandas库)
通过方法进行运算

运算方法含义DataFrame/Series数组.add(other)加运算:DataFrame/Series数组元素 + otherDataFrame/Series数组.sub(other)减运算:DataFrame/Series数组元素 – otherDataFrame/Series数组.mul(other)乘运算:DataFrame/Series数组元素 * otherDataFrame/Series数组.div(other)除运算:DataFrame/Series数组元素 / otherDataFrame/Series数组.mod(other)除(取整)运算:DataFrame/Series数组元素 % otherDataFrame/Series数组.pow(other)幂运算:DataFrame/Series数组元素 ** other

数组与数组/自身之间运算(形状相同时)

例:

四、Python数据挖掘(Pandas库)
  • :如果 other 是一个 数组的话,还有一个默认属性: …(other[, axis=1])
  • 默认为 axis=1DataFrame/Series数组other 的对应位置进行运算,缺值的位置用 NaN 填充
  • axis=0,则 DataFrame/Series数组 会和 行列转置后的other进行运算
; (2)逻辑运算

直接访问元素的逻辑表达式 ⇨ 返回值:布尔数组

布尔逻辑表达式 ⇨ 返回值:布尔数组
进行基本的逻辑运算,该表达式记为”布尔数组”( 重要

例:

四、Python数据挖掘(Pandas库)
逻辑运算符

逻辑运算符含义>大于

Original: https://blog.csdn.net/weixin_48261286/article/details/114156444
Author: ~宪宪
Title: 四、Python数据挖掘(Pandas库)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/676454/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球