Series
根据位置或者index索引
其中位置和index既可以是单独的一个值,也可以是一个数组。
s1 = pd.Series(np.arange(6), index=list('abcdef'))
s1
>>> a 0
b 1
c 2
d 3
e 4
f 5
# 根据位置索引
s1[[0, 2, 4]] # 等同于s1.iloc[[0, 2, 4]]
>>> a 0
c 2
e 4
# 根据index索引
s1[['a', 'c', 'e']] # 等同于s1.loc[['a', 'c', 'e']]
切片索引
除了位置和index,还可以用切片索引。
需要注意的是,切片索引也分为位置切片和index切片。位置切片不包括尾部,而index切片包含。
- 先给大家看一个不容易混淆的例子:
s1 = pd.Series(np.arange(6), index=list('abcdef'))
s1
a 0
b 1
c 2
d 3
e 4
f 5
# index切片,包含尾部
s1['a':'c']
>>> a 0
b 1
c 2
# 位置切片,不包含尾部
s1[0:2]
>>> a 0
b 1
- 再给大家看一个容易混淆的例子。
当index的值和位置的值相同时,一定要区分清楚你用的是index还是位置.
s1 = pd.Series(np.arange(6))
s1
>>> 0 0
1 1
2 2
3 3
4 4
5 5
# 当index的值和位置的值相同时,默认位置切片,不包含尾部
s1[0:2]
>>> 0 0
1 1
# index切片,包含尾部
s1.loc[0:2]
>>> 0 0
1 1
2 2
# 位置切片,不包含尾部
s1.iloc[0:2]
>>> 0 0
1 1
2 2
DataFrame
单个值或者数组索引列
df1 = pd.DataFrame(np.arange(12).reshape(4,3), index=list('abcd'), columns=['c1','c2','c3'])
df1
>>>c1 c2 c3
a 0 1 2
b 3 4 5
c 6 7 8
d 9 10 11
df1['c1']
>>> a 0
b 3
c 6
d 9
df1[['c1', 'c2']]
>>> c1 c2
a 0 1
b 3 4
c 6 7
d 9 10
特殊情况下索引行
df1 = pd.DataFrame(np.arange(12).reshape(4,3), index=list('abcd'), columns=['c1','c2','c3'])
df1
>>>c1 c2 c3
a 0 1 2
b 3 4 5
c 6 7 8
d 9 10 11
- 布尔值数组
df1[[True, False, False, True]]
>>> c1 c2 c3
a 0 1 2
d 9 10 11
df1[df1['c2']>6]
>>> c1 c2 c3
c 6 7 8
d 9 10 11
- 切片
df1[:2]
>>> c1 c2 c3
a 0 1 2
b 3 4 5
df1[::2]
>>> c1 c2 c3
a 0 1 2
c 6 7 8
iloc和loc
iloc(用于整数)和loc(用于标签)常规使用含义比较明确,这里就不赘述了。和Series一样,需要注意的是,iloc中切片不包括尾部,而index中切片包含。
df1 = pd.DataFrame(np.arange(12).reshape(4,3), index=list('abcd'), columns=['c1','c2','c3'])
df1
>>>c1 c2 c3
a 0 1 2
b 3 4 5
c 6 7 8
d 9 10 11
# iloc中切片不包含尾部
df1.iloc[0:2]
>>> c1 c2 c3
a 0 1 2
b 3 4 5
# loc中切片包含尾部
df1.loc['a':'c']
>>> c1 c2 c3
a 0 1 2
b 3 4 5
c 6 7 8