【数据处理】Pandas库:DataFrame索引设置

1,364 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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

运行结果如下图所示:

image.png

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

运行结果如下图所示:

image.png

1.1.3 添加行索引和列索引:

  • 将定义好的行索引和列索引赋给dataframe
  • index:行索引
  • columns:列索引
# index=stock行索引 
# columns=date列索引 
data = pd.DataFrame(stock_change,index=stock,columns=date) 
data

运行结果如下图所示:

image.png

1.1.4 获取行索引:

  • 使用.index方法获取列表行索引
# 获取行索引 
data.index

运行结果部分展示如下图:

image.png

1.2 DataFrame索引设置

DataFrame索引的设置

  1. 修改行列索引值
  2. 重设索引
  3. 设置新索引

1.2.1 修改索引

  • 索引要修改就得全修改
  • 全部重新赋值
# 修改行列索引
# 不能单独修改索引
stock_ = ["股票_{}".format(i) for i in range(10)]
stock_

运行结果如下图:

image.png

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