当前位置: 首页 > 知识库问答 >
问题:

熊猫iloc返回不同的范围比loc[重复]

祁鸿晖
2023-03-14

我对pandas的iloc函数有点困惑,因为我想选择一系列列,并且输出与预期不同。行选择也会发生同样的情况,因此我编写了一个小示例:

template = pd.DataFrame(
    {'Headline': ['Subheading', '', 'Animal', 'Tiger', 'Bird', 'Lion'],
     'Headline2': ['', 'Weight', 2017, 'group1', 'group2', 'group3'],
     'Headline3': ['', '', 2018, 'group1', 'group2', 'group3']
     })

     Headline Headline2 Headline3
0  Subheading                    
1                Weight          
2      Animal      2017      2018
3       Tiger    group1    group1
4        Bird    group2    group2
5        Lion    group3    group3

我想选择第1行到第2行print(template.loc[1:2])结果是我所期望的:

  Headline Headline2 Headline3
1             Weight          
2   Animal      2017      2018

如果我这样做print(template.iloc[1:2])我会认为我得到了相同的结果,但是没有:

  Headline Headline2 Headline3
1             Weight          

我有点困惑,因为我希望这两个函数的行为相同,但如果我选择一个范围(从:到),这两个函数的输出都会不同。
似乎使用iloc需要将TO值设为1,才能获得与locprint(template.iloc[1:3])相同的结果。

  Headline Headline2 Headline3
1             Weight          
2   Animal      2017      2018

有人能给它点光吗?

共有1个答案

文喜
2023-03-14

正如在loc文档中提到的:

警告:注意,与通常的python切片不同,启动和停止都包含在内

另一方面,ilocdo根据基于整数位置的索引进行选择,因此它不包括停止索引

 类似资料:
  • 参考这个答案,Lev说包括开始和停止索引,所以我尝试了这个: 但它们也不同。为什么啊? 有人能帮我吗?

  • 假设我有下面的数据框,我想将

  • 有人能解释一下这两种切片方法有什么不同吗? 我看过文档,也看到过这些答案,但我还是发现自己无法理解这三种方法有什么不同。在我看来,它们在很大程度上是可以互换的,因为它们处于较低的切片级别。 例如,假设我们希望获得的前五行。这两个是怎么工作的? 谁能说出三种情况,在使用上的区别比较清楚? 从前,我也想知道这两个函数与有什么不同,但是已经从pandas 1.0中删除了,所以我不再关心了。

  • 我有以下问题:在df中,我想要选择特定的行和特定的列,在这个选择中,获取第一个元素,并为它们分配一个新值。我天真地认为以下代码应该可以完成这项工作: 和都应将视图返回到df中,并且应覆盖该值。但是,数据帧不会改变。为什么? 我知道如何绕过它--首先使用创建一个新的df,然后使用更改值并更新原始df(如下所示)。 但是a)我不认为这是最佳的,b)我想知道为什么顶级解决方案不起作用。为什么它返回一个副

  • 所以我运行了一些示例: 类似于: 让我们使用和并确保得到相同的内容 这就是说,谁能提供关于方法可以做什么和不能做什么的指导呢?

  • 我在pandas数据框内寻找最大值,但仅在特定索引范围内: 这为我提供了一个具有多行的pandas.core.frame.DataFrame类型输出。我特别需要iloc[430:440]中最大值的索引整数,并且只有第一个索引出现最大值。 是否有限制.loc方法范围的方法? 非常感谢。