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
相关推荐
future141212 分钟前
C#学习日记
开发语言·学习·c#
菜包eo13 分钟前
二维码驱动的独立站视频集成方案
网络·python·音视频
Yo_Becky19 分钟前
【PyTorch】PyTorch预训练模型缓存位置迁移,也可拓展应用于其他文件的迁移
人工智能·pytorch·经验分享·笔记·python·程序人生·其他
DeepSeek-大模型系统教程21 分钟前
深入金融与多模态场景实战:金融文档分块技术与案例汇总
人工智能·ai·语言模型·程序员·大模型·大模型学习·大模型教程
xinxiangwangzhi_26 分钟前
pytorch底层原理学习--PyTorch 架构梳理
人工智能·pytorch·架构
king_harry28 分钟前
Java程序-OceanBase Connector/J 示例
开发语言
yzx99101331 分钟前
关于网络协议
网络·人工智能·python·网络协议
AiTEN_Robot32 分钟前
AGV 无人叉车关键技术问题解析:精准定位算法 / 安全避障逻辑 / 系统对接协议全方案
人工智能·机器人·自动化·制造
fangeqin32 分钟前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
云天徽上33 分钟前
【PaddleOCR】OCR常见关键信息抽取数据集,包含FUNSD、XFUND、WildReceipt等整理,持续更新中......
人工智能·计算机视觉·信息可视化·paddlepaddle·paddleocr·文本识别