如何优雅遍历pandas DataFrame的索引与指定单列数据?
pandas同时遍历索引与指定列的优化写法
你当前使用zip(df.index, df['A'])的实现逻辑完全正确,没有功能问题,针对这个场景pandas提供了更简洁的原生写法,不需要手动拼接两个迭代对象。
最优写法
直接取目标列对应的Series对象,调用其items()方法即可(pandas 1.5及以上版本支持,更早版本可使用功能完全一致的iteritems()方法),该方法原生就会按顺序返回(索引值, 列对应值)的元组:
import pandas as pd df = pd.DataFrame(index = [10, 20, 30]) df['A'] = [1, 2, 3] df['B'] = [5, 7, 9] # 优化后的遍历逻辑 for idx, col_val in df['A'].items(): print(idx, col_val)
运行输出和你原有代码完全一致:
10 1 20 2 30 3
写法优势
- 代码更简洁,不需要手动编写zip逻辑,避免出现迭代对象顺序写错、漏传参数的低级错误
- 性能和原有zip写法几乎无差异,没有额外的运算开销
- 属于pandas官方推荐的单列遍历范式,代码可读性更强,其他熟悉pandas的开发者可以快速理解逻辑意图
避坑提示
不要为了实现这个需求使用df.iterrows()方法:该方法会逐行遍历所有列的内容,如果你只需要单列的值,会产生大量不必要的性能损耗,当DataFrame数据量较大时运行速度会明显变慢。
内容的提问来源于stack exchange,提问作者Tor
相关产品推荐
相关产品推荐

