主要观点总结
本文主要讨论了Python中循环使用“loc”和“iloc”的时间效率问题,以及提供了使用“at”和“iat”作为替代方案的说明。文章还解释了“loc”、“iloc”、“at”和“iat”之间的区别及其在运行时间上存在差异的原因。
关键观点总结
关键观点1: “loc”和“iloc”在Pandas中的用途
“loc”用于使用行索引和列名访问DataFrame内的值,而“iloc”用于使用索引和列号访问值。
关键观点2: 使用“loc”在循环中的时间消耗
在DataFrame df中添加新列“c”的示例中,使用“loc”进行迭代和更新值所需的时间大约为40分钟。
关键观点3: 使用“at”作为“loc”的替代方案
通过使用“at”替换“loc”(或“iat”替换“iloc”)可以显著提高代码的执行效率,执行时间可以缩短约60倍。
关键观点4: 'at'和'iat'与'loc'和'iloc'之间的运行时间差异的原因
'at'和'iat'用于访问标量值,是轻量级的,因此比'loc'和'iloc'(用于访问系列/数据帧)执行速度快。
关键观点5: 建议
在Python的循环中使用“loc”/“iloc”并不是最佳选择,应尽量避免使用。相反,应在需要的地方使用“at”/“iat”,因为它们更快速。
正文
类似地,
iloc
用于使用索引和列号访问值。
##df.loc[index, column_number]
df.iloc[1,0]
### 输出:10
因此,
loc
函数
用于使用
列名
访问列,而
iloc
函数
用于使用
列索引
访问列。
如果在 Python 中将 loc/iloc 与循环一起使用会发生什么?
想象一下,我们想要在 DataFrame df 中添加一个新列“c”,其值等于“a”列和“b”列的值之和。
使用“
for
”循环,我们可以遍历我们的 DataFrame 并使用
loc
函数添加新列“c”,如下所示:
import timestart = time.time()
# 遍历 DataFrame df
for index, row in df.iterrows():
df.loc[index, 'c' ] = row.a + row.b
end = time.time()
print (end - start)
### 所用时间:2414 秒
使用
loc
进行迭代和更新值所需的时间大约为
40 分钟,
这是一个很长的时间。