四、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 列索引语句,数组
只返回新数组,不改变原数组

例:
在这里插入图片描述
还可以通过传入字典来定义 DataFrame

pd.DataFrame(dict)

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

例:
在这里插入图片描述

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”

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

例:
在这里插入图片描述
专门处理时间序列的函数

new_ = pd.to_datetime(datetime_list)

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

新对象的属性含义
month时间序列列表的月份列表
year时间序列列表的年份列表
weekday时间序列列表的星期列表
day时间序列列表的日份列表

例:
在这里插入图片描述
可以直接根据日期返回星期

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

例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.DataFrame 重设索引

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

访问行索引

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

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

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

例:
在这里插入图片描述
访问列索引

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

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

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

例:
在这里插入图片描述
重设行索引

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

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

例:
在这里插入图片描述
以某列值设置为新的索引

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

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

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

例:把 “name” 作为新的行索引
在这里插入图片描述
例:设置多个行索引
在这里插入图片描述

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] 的方式来单独访问某一列

后面会作更详细的介绍

例:
在这里插入图片描述


三、Pandas 三大结构之——Panel

MultiIndex 与 Panel

1.MultiIndex

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

例:
在这里插入图片描述

  • 索引的名字分别是 namesex

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

DataFrame数组.index.levels

显示行索引的内容

在这里插入图片描述

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 的行索引
在这里插入图片描述
可以把 DataFrame 理解为 Series 的容器

1.Series 的属性
属性含义
index索引
values
2.Series 的创建

pd.Series(data, index)

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

例:

直接创建
在这里插入图片描述
通过 DataFrame 创建
在这里插入图片描述

  • 会沿用原 DataFrame 的列索引作为 Series 的索引

通过字典创建
在这里插入图片描述


五、基本数据操作
1.数据的索引/访问
(1)直接索引(先列后行)

DataFrame数组[column][index]

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

DataFrame数组[start:stop]

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

例:

索引到某一值
在这里插入图片描述
访问整列数据
在这里插入图片描述
通过数组访问某些组合的数据
在这里插入图片描述

  • :上述情况中 column 是数组,index 不能指定任何值
    在这里插入图片描述
(2)按标签索引(先行后列)

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

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

例:

索引到某一值
在这里插入图片描述
通过数组访问部分值
在这里插入图片描述

  • 可以配合 DataFrame数组.index[ ]DataFrame数组.columns[ ] 使用,不过没必要这样用,可以直接使用 DataFrame数组.iloc[]
(3)按下标索引(先行后列)

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

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

例:

通过 start:stop 访问部分值
在这里插入图片描述

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

通过行下标访问部分值
在这里插入图片描述

(4)扩展:属性访问法

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

例:
在这里插入图片描述

2.数据的赋值

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

访问需要修改的值 = 值

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

例:
在这里插入图片描述
:这个方法还可以为 DataFrame/Series数组 增加新的行或列

例:
在这里插入图片描述

  • 此时访问的索引是不存在的索引即可
3.排序
(1)对 DataFrame 进行排序

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

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

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

DataFrame数组.sort_index()

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

例:
在这里插入图片描述

(2)对 Series 进行排序

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

Series数组.sort_values(ascending=True)

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

Series数组.sort_index()

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

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

直接进行运算

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

可以直接进行运算

例:
在这里插入图片描述
通过方法进行运算

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

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

例:
在这里插入图片描述

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

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

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

例:
在这里插入图片描述
逻辑运算符

逻辑运算符含义
>大于
<小于
!=不等于
|
&
  • :出现报错时可能是优先级问题,使用 ( ) 表明优先级

例:
在这里插入图片描述

DataFrame/Series数组[布尔数组]

布尔索引,索引布尔数组中为 True 的元素,并返回这些元素所在行索引

DataFrame/Series数组[布尔数组] = 值

布尔数组中为 True 的行索引进行统一赋值

例:

DataFrame/Series数组[布尔数组]
在这里插入图片描述
DataFrame/Series数组[布尔数组] = 值
在这里插入图片描述

逻辑运算函数

列索引以字母为开头时,列索引就是该 DataFrame/Series数组 的属性

当索引以字母为开头时,才可以使用下面这个方法:

DataFrame/Series数组.query(“列索引属性的逻辑表达式”)

根据逻辑运算符访问符合逻辑表达式
可以代替 DataFrame/Series数组[布尔数组] 的作用

例:直接使用列索引——属性即可
在这里插入图片描述

DataFrame/Series数组[列索引].isin(values)

检验 DataFrame/Series数组[列索引] 列中对应的值是否为 values,当 DataFrame/Series数组[列索引] 中某个位置的 这个值等于values这个值在values中 时,则该值所在对应位置为 True,否则对应位置为 False
DataFrame/Series数组[列索引] 为索引出的某列的值
values 可以是一个,也可以是一个数组

例:检验 “2021-01-02” 列是否有 23
在这里插入图片描述
再把这些符合的行索引出来
在这里插入图片描述

(3)统计运算

DataFrame/Series数组.describe()

能够直接得出很多统计结果:countmeanstdminmax

例:
在这里插入图片描述

  • ?%分位数:指把一组数据从小到大进行排列后,前 ?% 的数小于或等于该数——分位数

统计运算方法

统计运算方法含义
DataFrame/Series数组.sum([axis=0])(默认按列)统计总和
DataFrame/Series数组.mean([axis=0])(默认按列)统计平均值
DataFrame/Series数组.median([axis=0])(默认按列)统计中值
DataFrame/Series数组.max([axis=0])(默认按列)查找最大值
DataFrame/Series数组.min([axis=0])(默认按列)查找最小值
DataFrame/Series数组.mode([axis=0])(默认按列)统计众数
DataFrame/Series数组.abs([axis=0])显示所有值的绝对值
DataFrame/Series数组.std([axis=0])(默认按列)统计标准差
DataFrame/Series数组.var([axis=0])(默认按列)统计方差
DataFrame/Series数组.idxmax([axis=0])(默认按列)找出最大值所在位置
DataFrame/Series数组.idxmin([axis=0])(默认按列)找出最小值所在位置
  • :由于 DataFrame/Series数组 的列索引默认视为类似 SQL事物的属性,因此这些方法在设计时都是按列统计,因为按行统计(属性之间)没意义

例:
在这里插入图片描述
累计统计方法

累计统计方法含义
DataFrame/Series数组cumsum()前1/2/3/…/n个数逐个累加求和
DataFrame/Series数组cummax()前1/2/3/…/n个数的最大值
DataFrame/Series数组cumin()前1/2/3/…/n个数的最小值
DataFrame/Series数组cumprod()前1/2/3/…/n个数逐个累计求积

例:求一支股票的总涨跌幅
在这里插入图片描述
还可以画图显示总涨跌幅
在这里插入图片描述

(4)自定义运算

DataFrame/Series数组.apply(func[, axis=0])

DataFrame/Series数组 (默认按列)执行自定义的运算
func 自定义的运算
axis=0 默认按列统计

例:定义一个对列的 最大值-最小值 的函数
在这里插入图片描述

  • lambda表达式x 指代的就是 stock1 对象
5.Pandas 绘图

DataFrame/Series数组.plot(x=?, y=?, kind=?)

绘制简单图
x=? 图表的x轴,用列索引指定,如:x="name"
y=? 图表的y轴,用列索引指定,如:y="score"
kind=? 图表的类型,如:kind=“scatter” 就是散点图

kind参数含义
line折线图
hist直方图
scatter散点图
bar柱状图

例:
在这里插入图片描述


六、文件的读取与存储据
Format TypeData DescriptionReaderWriter
textCSVread_csvto_csv
textJSONread_jsonto_json
textHTMLread_htmlto_html
textLocal clipboardread_cliipboardto_cliipboard
binaryMS Excelread_excelto_excel
binaryHDF5 Formatread_hdfto_hdf
binaryFeather Formalread_featherto_feather
binaryParquet Formalread_parquetto_parquet
binaryMsgpackread_msgpackto_msgpack
binaryStataread_statato_stata
binarySASread_sas
binaryPython Pickle Fomatread_pickleto_pickle
SQLSQLread_sqlto_sql
SQLGoogle Big Queryread_gbqto_gbq
  • text: .text文件
  • binary:二进制文件
  • SQL:数据库文件
  • :最常用的是CSVHDF5JSON 文件

下面介绍三种最常用的文件类型的读取与存储

1.CSV 文件的读写

读取

pd.read_csv(filepath_or_buffer, usecols=[ ], names=[ ])

读取 csv 文件
filepath_or_buffer 文件路径,带扩展名
usecols=[ ] 指定读取的列索引,列表形式
names=[ ] 当指定的 CSV 文件没有索引字段时,读取 CSV 文件时会默认把第一行数据作为列索引,这非常不好,这个时候需要自己添加字段,列表形式

例:打开当前目录下 stock_day 下的 stock_day.csv 文件,并获取 highlowopenclose

import pandas as pd

pd.read_csv("./stock_day/stock_day.csv", usecols=["high", "low", "open", "close"])

写入

DataFrame/Series数组.to_csv(…)

DataFrame/Series数组 内容读取到 csv 文件中,带扩展名
path_or_buf 文件路径,文件不存在时则创建新文件
columns=[ ] 指定写入的列索引,列表形式
mode= “w”:覆盖,“a”:追加
index=True 是否写入行索引,默认为 True
header=True 是否写入列索引,默认为 True

例:把 前10行openclose 列数据写入文件

import pandas as pd

data[:10].to_csv("test.csv", columns=["open", "close"])
2.HDF5 文件的读写

hdf5 是存储三维数据的文件,这里的键则是指定了不同的二维表

读取

pd.read_hdf(…)

读取 hdf5 文件
filepath_or_buffer 文件路径,带扩展名
key 读取的键
mode 打开文件的模式

写入

DataFrame/Series数组.to_hdf(…)

写入 hdf5 文件
filepath_or_buffer 文件路径,带扩展名
key 指定键——指定要读取这张二维表时的键
mode= “w”:覆盖,“a”:追加,默认为追加,即追加一个新的键的二维表

扩展

优先选择使用 HDF5 文件存储

  • 其速度最快,是 pandas 默认支持的
  • 支持压缩,使用的方法是 blosc,可以提高磁盘利用率,节省空间
  • HDF5 是跨平台的,可以潜移到 Hadoop
3.JSON 文件的读写

JSON 文件是以一行作为一个样本
在这里插入图片描述
读取

pd.read_json(…)

读取 json 文件
filepath_or_buffer 文件路径,带扩展名
orient=“records” 读取文件后的展示方式,一般为 “records”(默认)
lines=False是否按行读取 json 对象,默认不是按行读取,一般选择 lines=True 按行读取

写入

DataFrame/Series数组.to_json(…)

读取 json 文件
filepath_or_buffer 文件路径,带扩展名
orient= 读取文件后的展示方式,一般选择 orient=“records” 即可
lines=False是否按行写入 json 对象,默认不是按行写入,一般选择 lines=True 按行写入

  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Python数据分析是通过使用Python编程语言和相应的进行数据处理、数据清洗、数据可视化等任务的过程。在Python数据分析中,Pandas是一种非常重要的工具,它提供了高性能、易于使用的数据结构和数据分析工具,能够帮助我们进行数据分析和数据处理工作。 在使用Pandas之前,我们首先需要安装该。可以通过使用pip命令在Python环境中安装Pandas,例如在命令行中输入"pip install pandas"即可完成安装。安装完成后,可以通过import语句将Pandas引入到我们的Python程序中,例如"import pandas as pd"。 Pandas主要提供了两种主要的数据结构,即Series和DataFrame。Series是一个一维的数据结构,类似于数组或者列表,可以存储不同类型的数据,如整数、浮点数、字符串等。DataFrame是一个二维的数据结构,可以看作是由多个Series组成的表格,每个Series代表DataFrame的一列。 借助Pandas,我们可以进行多种数据操作和分析。例如,可以利用Pandas读取和写入各种文件格式的数据,如CSV文件、Excel文件等。可以通过Pandas进行数据清洗,包括处理缺失数据、重复数据和异常值等。可以进行数据聚合和分组操作,计算各种统计和汇总指标。此外,Pandas还提供了简单方便的数据可视化工具,可以生成各种图表和图形展示数据。 总之,Python数据分析中的Pandas是一个非常强大和灵活的工具,可以帮助我们进行各种数据分析和处理任务。学习和掌握Pandas的使用,可以提高我们的数据分析能力,帮助我们更好地理解和挖掘数据中的信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值