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班张三274241618732
李四195123251234
王五2884992980
2班鲁班5676418313
张三丰467297818870
张无忌3473352423
# 获取元素df["期中"]["数学"]["1班"]["张三"]
42
​​​​​​​df.iloc[0,1]
42
df.loc[("1班","张三"),("期中","数学")]
42
  • 列索引​​​​​​​

# 列索引df["期中"]
语文数学英语
1班张三274241
李四195123
王五28849
2班鲁班56764
张三丰467297
张无忌347335
df["期中"][["数学"]]
数学
1班张三42
李四51
王五8
2班鲁班7
张三丰72
张无忌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班张三274241
李四195123
王五28849
2班鲁班56764
张三丰467297
张无忌347335
df.loc[:,"期中"]
语文数学英语
1班张三274241
李四195123
王五28849
2班鲁班56764
张三丰467297
张无忌347335
df.loc[:,("期中","数学")]
1班  张三     42
    李四     51
    王五      8
2班  鲁班      7
    张三丰    72
    张无忌    73
Name: (期中, 数学), dtype: int32
  • 行索引​​​​​​​

# 行索引df.loc["1班"]
期中期末
语文数学英语语文数学英语
张三274241618732
李四195123251234
王五2884992980
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班张三274241618732
df.iloc[[0,1,4,2]]
期中期末
语文数学英语语文数学英语
1班张三274241618732
李四195123251234
2班张三丰467297818870
1班王五2884992980

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班张三732694915933
李四1220861076
王五28115505936
2班鲁班963532207978
张三丰963794577974
张无忌69929652867
# 行切片df.iloc[1:5]
期中期末
语文数学英语语文数学英语
1班李四1220861076
王五28115505936
2班鲁班963532207978
张三丰963794577974
df.loc["1班":"2班"]
期中期末
语文数学英语语文数学英语
1班张三732694915933
李四1220861076
王五28115505936
2班鲁班963532207978
张三丰963794577974
张无忌69929652867
df.loc[[("1班","张三")]]
期中期末
语文数学英语语文数学英语
1班张三732694915933
  • 列切片​​​​​​​

# 列切片df.iloc[:,1:5]
期中期末
数学英语语文数学
1班张三26949159
李四2208610
王五81155059
2班鲁班35322079
张三丰37945779
张无忌9296528
df.loc["1班","期中":"期末"]
期中期末
语文数学英语语文数学英语
张三732694915933
李四1220861076
王五28115505936
# 建议切片使用隐式索引(使用数字下标)df.iloc[1:5,1:5]
期中期末
数学英语语文数学
1班李四2208610
王五81155059
2班鲁班35322079
张三丰37945779

  • 32
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾飞开源

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值