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

[ ]: