python切片操作¶
- 通过slice类实现,slice(start, stop[, step]) 选择范围:[start, stop) 左闭右开 索引和切片都用[],方法用()
[34]:
L = [0,1,2,3,4,5,6,7,8,9]
print('使用 slice 类实现 :\n', L[slice(2,5,2)])
print("使用 ':' 实现: \n", L[2:5:2])
使用 slice 类实现 :
[2, 4]
使用 ':' 实现:
[2, 4]
list,tuple中的切片¶
- 如果第一个索引是0,还可以省略, 到最后一个也可以省略,步长默认1
[33]:
print('起始位置为0,可以省略:',L[:3])
print('终止位置最后一个,可以省略:',L[3:])
起始位置为0,可以省略: [0, 1, 2]
终止位置最后一个,可以省略: [3, 4, 5, 6, 7, 8, 9]
- 倒数索引-1代表最后一个位置索引,-2代表倒数第二个索引
[26]:
print('开始位置到倒数第二个:',L[:-2])
print('倒数第二个位置到最后:', L[-2:])
开始位置到倒数第二个: [0, 1, 2, 3, 4, 5, 6, 7]
倒数第二个位置到最后: [8, 9]
- 步长设置, 默认1,可以自定义
[32]:
print('设定步长-2:', L[-1:-5:-2])
print('起始位置到终止位置步长为2:',L[::2])
设定步长-2: [9, 7]
起始位置到终止位置步长为2: [0, 2, 4, 6, 8]
Numpy中的切片操作¶
numpy中的一维数组切片¶
- Numpy 中多维数组的切片操作与 Python 中 list 的切片操作一样,同样由 start, stop, step 三个部分组成
[4]:
import numpy as np
arr = np.arange(12)
print('array is:', arr)
slice_one = arr[:4]
print('slice begins at 0 and ends at 4 is:', slice_one)
slice_two = arr[7:10]
print('slice begins at 7 and ends at 10 is:', slice_two)
slice_three = arr[0:12:4]
print('slice begins at 0 and ends at 12 with step 4 is:', slice_three)
array is: [ 0 1 2 3 4 5 6 7 8 9 10 11]
slice begins at 0 and ends at 4 is: [0 1 2 3]
slice begins at 7 and ends at 10 is: [7 8 9]
slice begins at 0 and ends at 12 with step 4 is: [0 4 8]
numpy 多维数组¶
- 上述例子是一维数组的例子,如果是多维数组,将不同维度上的切片操作用 逗号 分开就好了
[7]:
import numpy as np
arr = np.arange(12).reshape((3, 4))
print ('array is:\n', arr)
slice_one = arr[1:2, 1:3]
print('first slice is:\n', slice_one)
slice_two = arr[:, ::2]
print('second slice is:\n',slice_two)
array is:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
first slice is:
[[5 6]]
second slice is:
[[ 0 2]
[ 4 6]
[ 8 10]]
Pandas中的切片操作, 索引为左闭右闭¶
- Python和NumPy索引运算符”[]”和属性运算符”.”
- 连续索引不能加中括号,间断索引必须有中括号
- 如果按照标签索引推荐.loc不省略,‘:’也不省略,除非索引单列,否则容易引起混淆
| 语法 | 描述 |
|---|---|
| .loc | 根据标签索引 |
| .iloc | 基于位置索引 |
| .ix | 混合索引 |
[42]:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['A','b','c','d','e','f','g','h'], columns = ['A', 'BB', 'C', 'D'])
print(df)
A BB C D
A 1.040369 1.414435 -0.293069 -0.591653
b -0.791071 0.679128 -1.375184 0.661488
c 0.180464 -0.139289 0.196473 1.309078
d -0.773794 0.403391 1.516154 -0.535537
e -0.552546 -0.701777 0.187311 -2.197601
f 1.835848 -1.976343 -0.233643 -0.501942
g -1.407339 -0.678665 0.638208 1.161756
h -0.912836 0.569487 0.622114 -0.695103
.loc标签单列所有行索引¶
[43]:
print('单列索引返回dataframe:\n',type(df.loc[:,['A']])) #返回的是DataFrame 推荐
print('单列索引返回series:\n',type(df.loc[:,'A'])) #返回的是series 推荐
print('单列索引返回series:\n',type(df.A)) #返回的是series #推荐
print('单列索引返回series:\n',type(df['A'])) #返回的是series
print('单列索引返回dateframe:\n',type(df[['A']])) #返回的是series
单列索引返回dataframe:
<class 'pandas.core.frame.DataFrame'>
单列索引返回series:
<class 'pandas.core.series.Series'>
单列索引返回series:
<class 'pandas.core.series.Series'>
单列索引返回series:
<class 'pandas.core.series.Series'>
单列索引返回dateframe:
<class 'pandas.core.frame.DataFrame'>
.loc标签多列索引¶
[49]:
print('连续多列索引:\n',df.loc[:,'A':'C'],'\n') #返回的是DataFrame
print('间断多列索引:\n',df.loc[:,['A','C']], '\n') #返回的是DataFrame
print("索引所有行,能省略'.loc'和':':\n",df[['A','C']],'\n') #返回的是DataFrame #不推荐
连续多列索引:
A BB C
A 1.040369 1.414435 -0.293069
b -0.791071 0.679128 -1.375184
c 0.180464 -0.139289 0.196473
d -0.773794 0.403391 1.516154
e -0.552546 -0.701777 0.187311
f 1.835848 -1.976343 -0.233643
g -1.407339 -0.678665 0.638208
h -0.912836 0.569487 0.622114
间断多列索引:
A C
A 1.040369 -0.293069
b -0.791071 -1.375184
c 0.180464 0.196473
d -0.773794 1.516154
e -0.552546 0.187311
f 1.835848 -0.233643
g -1.407339 0.638208
h -0.912836 0.622114
索引所有行,能省略'.loc'和':':
A C
A 1.040369 -0.293069
b -0.791071 -1.375184
c 0.180464 0.196473
d -0.773794 1.516154
e -0.552546 0.187311
f 1.835848 -0.233643
g -1.407339 0.638208
h -0.912836 0.622114
loc单行多行索引¶
[45]:
print('单行全部列索引返回series:\n', df.loc['A',:],'\n') #推荐
print('单行全部列索引返回series:\n', df.loc['A'],'\n')
print('单行全部列索引返回dataframe:\n', df.loc[['A'],:],'\n') #推荐
print('单行全部列索引返回dataframe:\n', df.loc[['A']],'\n')
单行全部列索引返回series:
A 1.040369
BB 1.414435
C -0.293069
D -0.591653
Name: A, dtype: float64
单行全部列索引返回series:
A 1.040369
BB 1.414435
C -0.293069
D -0.591653
Name: A, dtype: float64
单行全部列索引返回dataframe:
A BB C D
A 1.040369 1.414435 -0.293069 -0.591653
单行全部列索引返回dataframe:
A BB C D
A 1.040369 1.414435 -0.293069 -0.591653
loc 多行全部列索引¶
[56]:
print("df.loc['A':'c', :],多行连续索引不省略',:':\n",df.loc['A':'c', :],'\n')
print("df['A':'c'],多行连续索引,省略 '.loc',':':\n",df['A':'c'],'\n')
print("df.loc['A':'c'],多行连续索引:\n",df.loc['A':'c'],'\n')
print("df.loc[['A','c','h']],多行间断索引:\n",df.loc[['A','c','h']],'\n')
df.loc['A':'c', :],多行连续索引不省略',:':
A BB C D
A 1.040369 1.414435 -0.293069 -0.591653
b -0.791071 0.679128 -1.375184 0.661488
c 0.180464 -0.139289 0.196473 1.309078
df['A':'c'],多行连续索引,省略 '.loc',':':
A BB C D
A 1.040369 1.414435 -0.293069 -0.591653
b -0.791071 0.679128 -1.375184 0.661488
c 0.180464 -0.139289 0.196473 1.309078
df.loc['A':'c'],多行连续索引:
A BB C D
A 1.040369 1.414435 -0.293069 -0.591653
b -0.791071 0.679128 -1.375184 0.661488
c 0.180464 -0.139289 0.196473 1.309078
df.loc[['A','c','h']],多行间断索引:
A BB C D
A 1.040369 1.414435 -0.293069 -0.591653
c 0.180464 -0.139289 0.196473 1.309078
h -0.912836 0.569487 0.622114 -0.695103
.loc多行多列索引¶
[52]:
print('连续多行多列索引:\n', df.loc['A':'h','A':'C'],'\n')
print('间断多行多列索引:\n', df.loc[['A','h'],['A','C']],'\n')
连续多行多列索引:
A BB C
A 1.040369 1.414435 -0.293069
b -0.791071 0.679128 -1.375184
c 0.180464 -0.139289 0.196473
d -0.773794 0.403391 1.516154
e -0.552546 -0.701777 0.187311
f 1.835848 -1.976343 -0.233643
g -1.407339 -0.678665 0.638208
h -0.912836 0.569487 0.622114
间断多行多列索引:
A C
A 1.040369 -0.293069
h -0.912836 0.622114
[ ]: