熊猫iloc返回的范围与loc不同

时间:2018-08-13 08:14:24

标签: python pandas dataframe

我对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

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

  Headline Headline2 Headline3
1             Weight          
2   Animal      2017      2018

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

  Headline Headline2 Headline3
1             Weight          

我有点困惑,因为我期望两个函数的行为相同,但是如果我选择一个范围(FROM:TO),两个函数的输出会有所不同。
似乎使用iloc必须具有TO值+1才能获得与loc print(template.iloc[1:3])相同的结果:

  Headline Headline2 Headline3
1             Weight          
2   Animal      2017      2018

有人可以照亮它吗?

1 个答案:

答案 0 :(得分:3)

docs中针对loc所述:

  

警告:请注意,与通常的python片相反,开始和终止   停止了

另一方面,iloc会基于基于整数位置的索引进行选择,因此它不包含停止索引。