专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
51好读  ›  专栏  ›  数据分析与开发

不要再在 pandas 循环中使用 loc/iloc 了!

数据分析与开发  · 公众号  · 数据库  · 2024-08-21 11:45

主要观点总结

本文主要讨论了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 分钟, 这是一个很长的时间。







请到「今天看啥」查看全文