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
相关推荐
毕设源码-邱学长3 小时前
【开题答辩全过程】以 基于Java的学校住宿管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
rookieﻬ°3 小时前
PHP框架漏洞
开发语言·php
GISer_Jing3 小时前
AI自动化工作流:智能驱动未来(升级研究生项目!!!)
人工智能·前端框架·自动化
草捏子3 小时前
Agent Skills:让 AI 一次学会、永远记住的能力扩展方案
人工智能
NocoBase4 小时前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
后端小肥肠4 小时前
OpenClaw实战|从识图到公众号内容自动化,我跑通了完整链路
人工智能·aigc·agent
猿界零零七4 小时前
pip install mxnet 报错解决方案
python·pip·mxnet
Elastic 中国社区官方博客4 小时前
快速 vs. 准确:衡量量化向量搜索的召回率
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
qq_381338504 小时前
【技术日报】2026-03-18 AI 领域重磅速递
大数据·人工智能
炸膛坦客4 小时前
单片机/C/C++八股:(二十)指针常量和常量指针
c语言·开发语言·c++