pandas中DataFrame多层次索引之loc和iloc

92 篇文章 9 订阅
62 篇文章 5 订阅

       loc[]表示基于label的位置索引,iloc[]表示基于数字的索引。这里需要注意的是对于多层次索引中两者的用法,对于iloc[],其用法很简单,iloc[i,j]就表示这个DataFrame的第i行第j列对应的元素,i表示最内侧的索引的位置,j也表示最内侧的索引的位置,所以其就是表示第i行j列的元素。

       对于多层次索引中的loc[],其用法比iloc[]复杂一些。loc[]优先表示行索引,如果其要同时体现列索引,则需要以loc[tuple,'a'],其中tuple表示行索引的多层次索引,以第一个元组标志,‘a’表示其对应的column,当然如果columns也是层次索引的话,也同样的可以用元组进行。除此情况之外,其他的情况都是针对行索引,比如loc['c']、loc['c','d']、loc[('c','d')]、loc[[('c','d')]],其都是对行进行索引,第一个表示选取行的最外层索引对应为'c'的内容,第二个表示再深入一层,如果只有两层,返回Series,第三个和第二个作用一样,第四个和前两个一样,但是返回的是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']
max_speed    12
shield        2
Name: (cobra, mark i), dtype: int64

df.loc[[('cobra', 'mark ii')]]
               max_speed  shield
cobra mark ii          0       4

df.loc[('cobra', 'mark i'), 'shield']
2

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

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas是一个强大的数据分析工具,在数据处理过程,我们经常需要对DataFrame进行查询操作。Pandas提供了多种查询方法,包括lociloc、at、iat和ix。以下是对这些方法的详细解释和区别。 1. locloc是通过行标签和列标签进行查询的方法。例如,可以使用df.loc[row_index, column_name]的方式来查询DataFrame的特定值或行列的子集。其row_index可以是单个索引索引列表或布尔数组,column_name可以是单个列名或列名列表。loc方法返回的是一个新的DataFrame或Series对象,以便进行进一步的操作。 2. ilociloc是通过行索引和列索引进行查询的方法。它与loc的用法类似,但是不是使用标签,而是使用整数位置来定位数据。例如,可以使用df.iloc[row_index, column_index]的方式来查询DataFrame的特定值或行列的子集。同样地,iloc方法返回的也是一个新的DataFrame或Series对象。 3. at:at用于直接查询DataFrame的单个元素,它使用行标签和列标签来定位。例如,可以使用df.at[row_label, column_label]的方式来获取特定位置的值。与loc方法相比,at方法更快,并且只返回标量值。 4. iat:iat用于通过整数位置来查询DataFrame的单个元素。可以使用df.iat[row_index, column_index]的方式来获取特定位置的值。iat方法与at方法的区别与ilocloc的区别相似。 5. ix:在旧版本的pandas,ix方法用于混合标签和整数位置的查询。它可以使用标签或整数位置来定位数据,但是由于存在一些歧义和性能问题,自从pandas 0.20版本后,被推荐使用lociloc方法来替代ix方法。 总的来说,loc和at是通过标签进行查询的方法,iloc和iat是通过整数位置进行查询的方法。同时,lociloc返回的是一个新的DataFrame或Series对象,而at和iat只返回标量值。在实际使用,根据需要选择不同的查询方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值