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]
68s.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 |
---|