熊猫系列的.values和.iloc之间的差异



我目前正在重构一些代码,我看到这两行都在使用:

  • foo = df['bar'].values[0]
  • foo = df['bar'].iloc[0]

根据我目前的理解,这两行做的是相同的事情:检索panda系列的第一个值。

它们真的一样吗?如果是,是否一种方式比另一种方式更推荐(由于内部细节、速度、设置值而不是获取值时的行为等(

代码df.values实际上返回一个numpy.array(即它可以在没有方括号的情况下使用(。

df[col].values
df[col].values[0] # 1st element of numpy array
df[col].values[1:3] # 2nd and 3rd element of numpy array

同时,df.iloc是一种基于位置的索引,用于从数据帧中获取元素。iloc必须与方括号一起使用,否则会出现错误。

df.iloc # Error
df.iloc[row, col] # Returns a cell, array (`Series`), matrix (`DataFrame`) based on input

微妙的区别在于返回的对象,以及幕后的实现。

iloc直接从存储器中读取数据并返回输出。

valuesDataFrame转换为numpy.array对象,然后从存储器读取数据并返回输出(因此iloc更快(。

最新更新