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
相关推荐
weixin_478689762 分钟前
【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】
笔记
一只小菜鸡4 分钟前
python+django5.1+docker实现CICD自动化部署springboot 项目前后端分离vue-element
python·docker·自动化
为祖国添砖爪哇8 分钟前
【自动化Selenium】Python 网页自动化测试脚本(上)
python·selenium·自动化
wzx_Eleven8 分钟前
【课堂笔记】隐私计算实训营第四期:“隐语”可信隐私计算开源框架
笔记
Topstip13 分钟前
iOS 19 重大更新泄露,将带来更“聪明”的 Siri 挑战 ChatGPT
人工智能·ios·ai·chatgpt
jokerest12321 分钟前
pwn——test_your_nc1——测试
开发语言·php
Nerinic27 分钟前
深度学习基础1
人工智能·深度学习
数字扫地僧33 分钟前
深度学习与知识图谱嵌入的结合:从理论到实践
人工智能·深度学习·知识图谱
碧海蓝天202233 分钟前
接上一主题,C++14中如何设计类似于std::any,使集合在C++中与Python一样支持任意数据?
开发语言·c++·python
CQXXCL38 分钟前
MySQL-学习笔记
笔记·学习·mysql