pandas.DataFrame.loc和.iloc用法详解

.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值