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
相关推荐
池央21 分钟前
AI性能极致体验:通过阿里云平台高效调用满血版DeepSeek-R1模型
人工智能·阿里云·云计算
uppp»21 分钟前
深入理解 Java 反射机制:获取类信息与动态操作
java·开发语言
我们的五年22 分钟前
DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成
人工智能·chatgpt·ai作画·deepseek
Yan-英杰23 分钟前
百度搜索和文心智能体接入DeepSeek满血版——AI搜索的新纪元
图像处理·人工智能·python·深度学习·deepseek
Fuweizn25 分钟前
富唯智能可重构柔性装配产线:以智能协同赋能制造业升级
人工智能·智能机器人·复合机器人
weixin_307779131 小时前
Azure上基于OpenAI GPT-4模型验证行政区域数据的设计方案
数据仓库·python·云计算·aws
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
taoqick2 小时前
对PosWiseFFN的改进: MoE、PKM、UltraMem
人工智能·pytorch·深度学习
suibian52352 小时前
AI时代:前端开发的职业发展路径拓宽
前端·人工智能
CSDN_PBB3 小时前
[STM32 - 野火] - - - 固件库学习笔记 - - - 十五.设置FLASH的读写保护及解除
笔记·stm32·学习