loc
通过标签或布尔数组访问一组行和列。
.loc[] 主要基于标签,但也可以与布尔数组一起使用。
允许的输入为:
- 单个标签,例如’a’,
- 标签列表或数组,例如。[‘a’, ‘b’, ‘c’]
- 带有标签的切片对象,例如’a’:‘f’。
- 与切片轴长度相同的布尔数组,例如。[True, False, True]
- 可对齐的布尔系列。遮罩之前,键的索引将对齐。
- 可对齐索引。返回的选择的索引将作为输入。
获取单行
为了获取当行,只需要利用行号就能够获取,
1 2 3 4 5 6 7 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> print (df.loc[ "viper" ]) max_speed 4 shield 5 Name: viper, dtype: int64 |
获取特定的几行
- 可以将多个行号组成一个list,然后作为参数输入进去
1 2 3 4 5 6 7 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> print (df.loc[[ "cobra" , 'sidewinder' ]]) max_speed shield cobra 1 2 sidewinder 7 8 |
- 利用切片获取多个连续的行
在利用切片时,也需要使用label进行切片,否则pandas不会识别
1 2 3 4 5 6 7 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> print (df.loc[ 'viper' : 'sidewinder' ]) max_speed shield viper 4 5 sidewinder 7 8 |
获取特定行和列
1 2 3 4 5 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> print (df.loc[ 'viper' , 'shield' ]) 5 |
也可以通过切片和列组合,获取特定的数值
1 2 3 4 5 6 7 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> print (df.loc[ 'viper' : 'sidewinder' ,:]) max_speed shield viper 4 5 sidewinder 7 8 |
通过bool值进行选择
1 2 3 4 5 6 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> df.loc[[ False , False , True ]] max_speed shield sidewinder 7 8 |
通过条件进行选择获取
通过条件获取,时间也是通过bool获取的一种特例,
1 2 3 4 5 6 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> df.loc[df[ 'shield' ] > 6 ] max_speed shield sidewinder 7 8 |
通过下面的结果,我们可以看出,通过条件获取后是一个对象,该对象的值就是一个bool列表,通过条件获取就是通过这个bool列表进行获取
1 2 3 4 5 | >>> s = df[ 'shield' ] > 6 >>> type (s) >>> s.values array([ False , False , True ]) |
通过回调函数获取
1 2 3 4 5 6 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> df.loc[ lambda df: df[ 'shield' ] = = 8 ] max_speed shield sidewinder 7 8 |
对数值进行修改
这里主要讲的是对数值的修改是永久性的,
1 2 3 4 5 6 7 8 9 | >>> df = pd.DataFrame([[ 1 , 2 ], [ 4 , 5 ], [ 7 , 8 ]], ... index = [ 'cobra' , 'viper' , 'sidewinder' ], ... columns = [ 'max_speed' , 'shield' ]) >>> df.loc[[ 'viper' , 'sidewinder' ], [ 'shield' ]] = 50 >>> df max_speed shield cobra 1 2 viper 4 50 sidewinder 7 50 |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。