如何不使用df.iterrows()按元组索引替换DataFrame列整数值
实现方法
完全不需要用df.iterrows(),有两种非常简洁的批量处理方案,性能比逐行循环高很多:
- 直接用
Series.map做映射,代码最短:
因为元组本身就是可位置索引的序列,df['col_2'] = df['col_2'].map(my_tuple)col_2列里存的整数刚好可以直接当索引值取对应的元组元素,整个操作是批量完成的,没有逐行遍历的开销。 - 用NumPy花式索引,处理大体积DataFrame时速度更快:
先把元组转成numpy数组,再用import numpy as np df['col_2'] = np.array(my_tuple)[df['col_2']]col_2列的整数值数组当位置索引,一次性把所有对应元素取出来替换原列值。
两种方法执行完都能得到目标输出:
col_1 col_2 0 abc frank 1 cba joe 2 bca bob
小提示:用这两种方法要确保
col_2里的所有整数都在元组的合法索引范围内,也就是不能小于0、不能超过元组长度减1,不然会报索引越界的错误。
内容的提问来源于stack exchange,提问作者Daniel Arges
相关产品推荐
相关产品推荐

