Pandas 多层索引中的索引和切片操作你学会了吗

1. Series的索引操作

  • 对于Series来说,直接中括号[]与使用 .loc() 完全一样

  • 显式索引

    导包import numpy as npimport pandas as pd

    data = np.random.randint(0,100,size=6)
    index = [ ["1班","1班","1班","2班","2班","2班"], ["张三","李四","王五","鲁班","张三丰","张无忌"]]
    s = pd.Series(data=data,index=index)s
    1班 张三 68
    李四 12
    王五 91
    2班 鲁班 85
    张三丰 52
    张无忌 79
    dtype: int32

    显式索引

    s["1班"]

    张三 68
    李四 12
    王五 91
    dtype: int32
    s.loc["1班"]

复制代码
张三 68
李四 12
王五 91
dtype: int32
s[["1班"]]

1班 张三 68
    李四 12
    王五 91
dtype: int32
s[["1班","2班"]]
1班 张三 68
    李四 12
    王五 91
2班 鲁班 85
    张三丰 52
    张无忌 79
dtype: int32

s["1班"]["张三"]
68

s["1班"]["张三"]
68
​​​​​

s["1班","张三"]

68

s.loc["1班"]["张三"]
68
s.loc["1班","张三"]
68
  • 隐式索引

    隐式索引

    ​​​​​​​s[0]
    68

    s.iloc[0]

复制代码
68
s.iloc[[0,1]]
复制代码
1班 张三 68
    李四 12
dtype: int32

2. Series的切片操作

  • 显式切片

    显式切片 s["1班":"2班"]

复制代码
1班 张三 68
    李四 12
    王五 91
2班 鲁班 85
    张三丰 52
    张无忌 79
dtype: int32
s.loc["1班":"2班"]
复制代码
1班 张三 68
    李四 12
    王五 91
2班 鲁班 85
    张三丰 52
    张无忌 79
dtype: int32
s.loc["1班"]["张三":"李四"]
复制代码
张三 68
李四 12
dtype: int32
  • 隐式切片​​​​​​​

    建议使用隐式索引 s[1:5]

复制代码
1班 李四 12
    王五 91
2班 鲁班 85
    张三丰 52
dtype: int32
s.iloc[1:5]
复制代码
1班 李四 12
    王五 91
2班 鲁班 85
    张三丰 52
dtype: int32

3. DataFrame的索引操作

  • 获取元素

    导包import numpy as npimport pandas as pd

    data = np.random.randint(0,100,size=(6,6))

    行索引index = pd.MultiIndex.from_arrays([ ["1班","1班","1班","2班","2班","2班"], ["张三","李四","王五","鲁班","张三丰","张无忌"]])

    列索引columns = pd.MultiIndex.from_arrays([ ["期中","期中","期中","期末","期末","期末"], ["语文","数学","英语","语文","数学","英语"]])

    df = pd.DataFrame(data=data,index=index,columns=columns)df

| | | 期中 ||| 期末 |||
| | | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |
| 1班 | 张三 | 27 | 42 | 41 | 61 | 87 | 32 |
| 1班 | 李四 | 19 | 51 | 23 | 25 | 12 | 34 |
| 1班 | 王五 | 28 | 8 | 49 | 92 | 9 | 80 |
| 2班 | 鲁班 | 56 | 7 | 64 | 1 | 83 | 13 |
| 2班 | 张三丰 | 46 | 72 | 97 | 81 | 88 | 70 |

2班 张无忌 34 73 35 24 2 3
# 获取元素df["期中"]["数学"]["1班"]["张三"]

42
​​​​​​​df.iloc[0,1]
42

df.loc[("1班","张三"),("期中","数学")]
复制代码
42
  • 列索引​​​​​​​

    列索引df["期中"]

| | | 语文 | 数学 | 英语 |
| 1班 | 张三 | 27 | 42 | 41 |
| 1班 | 李四 | 19 | 51 | 23 |
| 1班 | 王五 | 28 | 8 | 49 |
| 2班 | 鲁班 | 56 | 7 | 64 |
| 2班 | 张三丰 | 46 | 72 | 97 |

2班 张无忌 34 73 35
df["期中"][["数学"]]

| | | 数学 |
| 1班 | 张三 | 42 |
| 1班 | 李四 | 51 |
| 1班 | 王五 | 8 |
| 2班 | 鲁班 | 7 |
| 2班 | 张三丰 | 72 |

2班 张无忌 73
df["期中"]["数学"]
复制代码
1班  张三     42
    李四     51
    王五      8
2班  鲁班      7
    张三丰    72
    张无忌    73
Name: 数学, dtype: int32
df["期中","数学"]
复制代码
1班  张三     42
    李四     51
    王五      8
2班  鲁班      7
    张三丰    72
    张无忌    73
Name: (期中, 数学), dtype: int32
df.期中.数学
复制代码
1班  张三     42
    李四     51
    王五      8
2班  鲁班      7
    张三丰    72
    张无忌    73
Name: 数学, dtype: int32
df.iloc[:,1]
复制代码
1班  张三     42
    李四     51
    王五      8
2班  鲁班      7
    张三丰    72
    张无忌    73
Name: (期中, 数学), dtype: int32
df.iloc[:,[0,1,2]]

| | | 期中 |||
| | | 语文 | 数学 | 英语 |
| 1班 | 张三 | 27 | 42 | 41 |
| 1班 | 李四 | 19 | 51 | 23 |
| 1班 | 王五 | 28 | 8 | 49 |
| 2班 | 鲁班 | 56 | 7 | 64 |
| 2班 | 张三丰 | 46 | 72 | 97 |

2班 张无忌 34 73 35
df.loc[:,"期中"]

| | | 语文 | 数学 | 英语 |
| 1班 | 张三 | 27 | 42 | 41 |
| 1班 | 李四 | 19 | 51 | 23 |
| 1班 | 王五 | 28 | 8 | 49 |
| 2班 | 鲁班 | 56 | 7 | 64 |
| 2班 | 张三丰 | 46 | 72 | 97 |

2班 张无忌 34 73 35
df.loc[:,("期中","数学")]
复制代码
1班  张三     42
    李四     51
    王五      8
2班  鲁班      7
    张三丰    72
    张无忌    73
Name: (期中, 数学), dtype: int32
  • 行索引​​​​​​​

    行索引df.loc["1班"]

| | 期中 ||| 期末 |||
| | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |
| 张三 | 27 | 42 | 41 | 61 | 87 | 32 |
| 李四 | 19 | 51 | 23 | 25 | 12 | 34 |

王五 28 8 49 92 9 80
df.loc["1班"].loc["张三"]
复制代码
期中  语文    27
    数学    42
    英语    41
期末  语文    61
    数学    87
    英语    32
Name: 张三, dtype: int32
df.loc["1班","张三"]
复制代码
期中  语文    27
    数学    42
    英语    41
期末  语文    61
    数学    87
    英语    32
Name: (1班, 张三), dtype: int32
df.loc[("1班","张三")]
复制代码
期中  语文    27
    数学    42
    英语    41
期末  语文    61
    数学    87
    英语    32
Name: (1班, 张三), dtype: int32
  • 隐式索引​​​​​​​

    隐式索引df.iloc[0]

复制代码
期中  语文    27
    数学    42
    英语    41
期末  语文    61
    数学    87
    英语    32
Name: (1班, 张三), dtype: int32
df.iloc[[0]]

| | | 期中 ||| 期末 |||
| | | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |

1班 张三 27 42 41 61 87 32
df.iloc[[0,1,4,2]]

| | | 期中 ||| 期末 |||
| | | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |
| 1班 | 张三 | 27 | 42 | 41 | 61 | 87 | 32 |
| 1班 | 李四 | 19 | 51 | 23 | 25 | 12 | 34 |
| 2班 | 张三丰 | 46 | 72 | 97 | 81 | 88 | 70 |

1班 王五 28 8 49 92 9 80

4. DataFrame的切片操作

  • 行切片​​​​​​​

    导包import numpy as npimport pandas as pd

    data = np.random.randint(0,100,size=(6,6))

    行索引index = pd.MultiIndex.from_arrays([ ["1班","1班","1班","2班","2班","2班"], ["张三","李四","王五","鲁班","张三丰","张无忌"]])

    列索引columns = pd.MultiIndex.from_arrays([ ["期中","期中","期中","期末","期末","期末"], ["语文","数学","英语","语文","数学","英语"]])

    df = pd.DataFrame(data=data,index=index,columns=columns)df

| | | 期中 ||| 期末 |||
| | | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |
| 1班 | 张三 | 73 | 26 | 94 | 91 | 59 | 33 |
| 1班 | 李四 | 1 | 2 | 20 | 86 | 10 | 76 |
| 1班 | 王五 | 2 | 81 | 15 | 50 | 59 | 36 |
| 2班 | 鲁班 | 96 | 35 | 32 | 20 | 79 | 78 |
| 2班 | 张三丰 | 96 | 37 | 94 | 57 | 79 | 74 |

2班 张无忌 69 92 9 65 28 67
# 行切片df.iloc[1:5]

| | | 期中 ||| 期末 |||
| | | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |
| 1班 | 李四 | 1 | 2 | 20 | 86 | 10 | 76 |
| 1班 | 王五 | 2 | 81 | 15 | 50 | 59 | 36 |
| 2班 | 鲁班 | 96 | 35 | 32 | 20 | 79 | 78 |

2班 张三丰 96 37 94 57 79 74
df.loc["1班":"2班"]

| | | 期中 ||| 期末 |||
| | | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |
| 1班 | 张三 | 73 | 26 | 94 | 91 | 59 | 33 |
| 1班 | 李四 | 1 | 2 | 20 | 86 | 10 | 76 |
| 1班 | 王五 | 2 | 81 | 15 | 50 | 59 | 36 |
| 2班 | 鲁班 | 96 | 35 | 32 | 20 | 79 | 78 |
| 2班 | 张三丰 | 96 | 37 | 94 | 57 | 79 | 74 |

2班 张无忌 69 92 9 65 28 67
df.loc[[("1班","张三")]]

| | | 期中 ||| 期末 |||
| | | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |

1班 张三 73 26 94 91 59 33
  • 列切片​​​​​​​

    列切片df.iloc[:,1:5]

| | | 期中 || 期末 ||
| | | 数学 | 英语 | 语文 | 数学 |
| 1班 | 张三 | 26 | 94 | 91 | 59 |
| 1班 | 李四 | 2 | 20 | 86 | 10 |
| 1班 | 王五 | 81 | 15 | 50 | 59 |
| 2班 | 鲁班 | 35 | 32 | 20 | 79 |
| 2班 | 张三丰 | 37 | 94 | 57 | 79 |

2班 张无忌 92 9 65 28
df.loc["1班","期中":"期末"]

| | 期中 ||| 期末 |||
| | 语文 | 数学 | 英语 | 语文 | 数学 | 英语 |
| 张三 | 73 | 26 | 94 | 91 | 59 | 33 |
| 李四 | 1 | 2 | 20 | 86 | 10 | 76 |

王五 2 81 15 50 59 36
# 建议切片使用隐式索引(使用数字下标)df.iloc[1:5,1:5]

| | | 期中 || 期末 ||
| | | 数学 | 英语 | 语文 | 数学 |
| 1班 | 李四 | 2 | 20 | 86 | 10 |
| 1班 | 王五 | 81 | 15 | 50 | 59 |
| 2班 | 鲁班 | 35 | 32 | 20 | 79 |

2班 张三丰 37 94 57 79
相关推荐
芊寻(嵌入式)7 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
2403_8757368710 分钟前
道品科技智慧农业中的自动气象检测站
网络·人工智能·智慧城市
一颗松鼠16 分钟前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_17 分钟前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_201323 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑30 分钟前
php 使用qrcode制作二维码图片
开发语言·php
零意@31 分钟前
ubuntu切换不同版本的python
windows·python·ubuntu
学术头条33 分钟前
AI 的「phone use」竟是这样练成的,清华、智谱团队发布 AutoGLM 技术报告
人工智能·科技·深度学习·语言模型
夜雨翦春韭34 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
准橙考典35 分钟前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法