.loc[ ]与.iloc[ ]用法详解
目录
注意
通过.loc[ ]或者.iloc[ ]获取数据时需要注意的是,使用
[[ ]]
返回值是DataFrame
,而使用[]
返回值则是pandas.core.series.Series
①pandas.DataFrame.loc
.loc[ ]用于通过行或列的标签或者boolean数组来访问DataFrame中的一组行和列。(可以获取值,改变值)
具体的使用方法在下方通过代码实现来理解。
举个栗子
首先创建数据(df)
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
... index=['cobra', 'viper', 'sidewinder'],
... columns=['max_speed', 'shield'])
>>> df
max_speed shield
cobra 1 2
viper 4 5
sidewinder 7 8
获取数据
获取数据
- 根据行标签获取DataFrame
>>> df.loc[['viper', 'sidewinder']]
max_speed shield
viper 4 5
sidewinder 7 8
- 根据行和列标签获取值(在此为
numpy.int64
)
>>> df.loc['cobra', 'shield']
2
- 使用切片
>>> df.loc['cobra':'viper', 'max_speed']
cobra 1
viper 4
Name: max_speed, dtype: int64
注意
此处的切片与通常的python切片不同,它包含了起始和结束
- 根据boolean数组获取行(True表示获取行,False表示不获取)
>>> df.loc[[False, False, True]]
max_speed shield
sidewinder 7 8
- 或者使用返回值为boolean的语句作为参数
>>> df.loc[df['shield'] > 6]
max_speed shield
sidewinder 7 8
- 也可以利用
lambda
关键字
>>> df.loc[lambda df: df['shield'] == 8]
max_speed shield
sidewinder 7 8
更新数据
更新数据
- 设置整行的值
>>> df.loc['cobra'] = 10
>>> df
max_speed shield
cobra 10 10
viper 4 50
sidewinder 7 50
- 设置整列的值
>>> df.loc[:, 'max_speed'] = 30
>>> df
max_speed shield
cobra 30 10
viper 30 50
sidewinder 30 50
- 根据行和列设置值
>>> df.loc[['viper', 'sidewinder'], ['shield']] = 50
>>> df
max_speed shield
cobra 1 2
viper 4 50
sidewinder 7 50
进阶教程(多标签)
进阶教程(多标签)
创建多标签DataFrame
>>> tuples = [
... ('cobra', 'mark i'), ('cobra', 'mark ... ii'),
... ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
... ('viper', 'mark ii'), ('viper', 'mark iii')
... ]
>>> index = pd.MultiIndex.from_tuples(tuples)
>>> values = [[12, 2], [0, 4], [10, 20],
... [1, 4], [7, 1], [16, 36]]
>>> df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)
>>> df
max_speed shield
cobra mark i 12 2
mark ii 0 4
sidewinder mark i 10 20
mark ii 1 4
viper mark ii 7 1
mark iii 16 36
- 单标签获取
>>> df.loc['cobra']
max_speed shield
mark i 12 2
mark ii 0 4
- 多标签获取
>>> df.loc[('cobra', 'mark ii')]
max_speed 0
shield 4
Name: (cobra, mark ii), dtype: int64
- 切片形式
>>> df.loc[('cobra', 'mark i'):'viper']
max_speed shield
cobra mark i 12 2
mark ii 0 4
sidewinder mark i 10 20
mark ii 1 4
viper mark ii 7 1
mark iii 16 36
>>> df.loc[('cobra', 'mark i'):('viper', 'mark ii')]
max_speed shield
cobra mark i 12 2
mark ii 0 4
sidewinder mark i 10 20
mark ii 1 4
viper mark ii 7 1
②pandas.DataFrame.iloc
.iloc[ ]用于通过行或列的索引(索引从0到len-1)或者boolean数组来访问DataFrame中的一组行和列。
具体的使用方法在下方通过代码实现来理解。
- 获取数据
- 更新数据(与.loc[ ]相似,不再赘述)
举个栗子
创建数据(df)
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
... {'a': 100, 'b': 200, 'c': 300, 'd': 400},
... {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
a b c d
0 1 2 3 4
1 100 200 300 400
2 1000 2000 3000 4000
获取数据
- 行索引获取行
>>> df.iloc[0]
a 1
b 2
c 3
d 4
Name: 0, dtype: int64
- 切片获取
>>> df.iloc[:3]
a b c d
0 1 2 3 4
1 100 200 300 400
2 1000 2000 3000 4000
- 根据boolean数组获取
>>> df.iloc[[True, False, True]]
a b c d
0 1 2 3 4
2 1000 2000 3000 4000
- 根据行和列索引获取值
>>> df.iloc[0, 1]
2
- 获取多行多列
>>> df.iloc[[0, 2], [1, 3]]
b d
0 2 4
2 2000 4000