熊猫的df.take()和df.iloc []有什么区别?

时间:2020-06-07 22:48:31

标签: pandas indexing

在我看来,df.take()与更常见的df.iloc[]具有相同的功能。我检查了文档,但没有发现任何不同。在某些情况下,take()iloc[]更可取吗?

2 个答案:

答案 0 :(得分:0)

情况: 我收到以下错误消息,最后发现它挂在了.iloc上。

TypeError: unhashable type: 'list'

由于iloc返回的列表是可变的,因此代码不会进行求和。从.iloc更改为.take即可解决此问题。

#returns list
df3['sum_total']= df3.iloc[:,-30].sum(axis=[1])
#returns tuple and worked
df3['sum_total']= df3.take([-30], axis=1).sum(axis=1)

答案 1 :(得分:0)

有一些非常重要的区别:

  1. .iloc 是 类型,而 .take 是一个方法
  2. 最重要的 .iloc 可以同时索引到行和列。 .take 只能选择其中之一。
  3. .take 始终返回一个在两个轴上具有相同级别数的 DataFrame。相比之下,.iloc 可以轻松返回更少的级别,以至于完全返回一个 Series 而不是 DataFrame,即 df.iloc[3, :] 返回一个以列为索引的 Series,但 df.take([3 ]) 返回一个只有一行的 DataFrame。
  4. 同样重要的是,.take 总是返回一个副本。这意味着您也可以使用 .iloc 进行赋值,但 .take 不是这种情况。