持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
注意:本案例使用 Jupyter Notebook 进行案例演示
1. Pandas介绍
Pandas库基本情况概括如下:
- 专门用于数据挖掘的开源Python库
- 以Numpy为基础
- 基于matplotlib
Pandas的主要用处:
- 数据处理
- 读取文件
- 封装了matplotlib和numpy的画图和计算
1.1 DataFrame结构
DataFrame结构:既有行索引,又有列索引的二维数组
- 行索引,表明不同行,横向索引,叫index
- 列索引,表明不同列,纵向索引,叫columns
常用属性:
- .shape
- .index:行索引列表
- .columns:列索引列表
- .values:直接获取其中array的值(数组)
- .T:行列转置,列变成行,行变成列
方法:
- head():返回前几行
- tail():返回后几行
1.1.1 创建数组数据:
- .normal(0,1,(10,5)) :生成10行5列的标准正态分布
import numpy as np
# 创建一个符合正态分布的10个股票5天的涨跌幅数据
stock_change = np.random.normal(0,1,(10,5))
stock_change
运行结果如下图所示:
1.1.2 创建自定义行索引和列索引:
- 下面将自定义创建两个索引
- 分别保存在stock变量与date变量中
- 其中date在后面用于赋值列索引
- stock变量后面用于赋值给行索引
# 生成行列索引
import pandas as pd
# 为数组创建索引
pd.DataFrame(stock_change)
# 添加自定义行索引
stock = ["股票{}".format(i) for i in range(10)] pd.DataFrame(stock_change, index=stock)
# 添加自定义列索引
# 日期
date = pd.date_range(start="20220901", periods=5, freq="B")
date
运行结果如下图所示:
1.1.3 添加行索引和列索引:
- 将定义好的行索引和列索引赋给dataframe
- index:行索引
- columns:列索引
# index=stock行索引
# columns=date列索引
data = pd.DataFrame(stock_change,index=stock,columns=date)
data
运行结果如下图所示:
1.1.4 获取行索引:
- 使用
.index方法获取列表行索引
# 获取行索引
data.index
运行结果部分展示如下图:
1.2 DataFrame索引设置
DataFrame索引的设置
- 修改行列索引值
- 重设索引
- 设置新索引
1.2.1 修改索引
- 索引要修改就得全修改
- 全部重新赋值
# 修改行列索引
# 不能单独修改索引
stock_ = ["股票_{}".format(i) for i in range(10)]
stock_
运行结果如下图:
1.2.2 添加索引
- 将刚才定义好的新索引赋给原数据
data.index = stock_
data
1.2.2 重设索引
- data.reset_index():把原来的行索引变成普通列,然后又添加了一些索引
- data.reset_index(drop=True):把原索引扔掉,添加新索引
# 重设索引
data.reset_index()
部分结果如下图所示:
- 新生成了0-9为新索引(重设了索引)
- 原股票_0 — 股票_9 变成数据的一列了(保留了原索引)
index 2022-09-01 00:00:00 2022-09-02 00:00:00 2022-09-05 00:00:00
0 股票_0 -1.843821 1.567570 0.988464
1 股票_1 0.641738 1.563987 1.365527
2 股票_2 -0.017163 0.666558 -1.014073
3 股票_3 -0.109082 0.840247 0.859482
4 股票_4 -1.296662 0.758392 0.820266
5 股票_5 -2.314527 -0.844394 -0.010306
6 股票_6 0.981943 1.061719 -0.668878
7 股票_7 -0.310724 -0.514234 0.661678
8 股票_8 0.689029 -0.791441 -0.106705
9 股票_9 -1.439421 2.203460 -0.165815
另一种重设索引:
- drop=True:将原索引删去,重设新索引
data.reset_index(drop=True)
运行结果如下所示:
2022-09-01 2022-09-02 2022-09-05 2022-09-06 2022-09-07
0 -1.843821 1.567570 0.988464 0.343731 1.183417
1 0.641738 1.563987 1.365527 0.151234 -0.879639
2 -0.017163 0.666558 -1.014073 0.507855 -0.193711
3 -0.109082 0.840247 0.859482 -1.112495 0.445764
4 -1.296662 0.758392 0.820266 -1.260930 -0.101870
5 -2.314527 -0.844394 -0.010306 0.782616 -0.172838
6 0.981943 1.061719 -0.668878 0.475571 -0.083897
7 -0.310724 -0.514234 0.661678 -1.132292 -0.168110
8 0.689029 -0.791441 -0.106705 0.356245 -0.452919
9 -1.439421 2.203460 -0.165815 0.765562 1.231891