我目前正在重构一些代码,我看到这两行都在使用:
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
直接从存储器中读取数据并返回输出。
values
将DataFrame
转换为numpy.array
对象,然后从存储器读取数据并返回输出(因此iloc
更快(。