循环遍历DataFrame操作列是否会因新增列触发死循环?
问题解答
核心结论
你给出的写法不会触发死循环。
具体原理
对Pandas的DataFrame直接做for feature in df迭代时,迭代器会在循环启动的瞬间一次性读取当前df的所有列名,生成固定的迭代序列,后续循环过程中不管你对df做列修改还是新增列,都不会改变已经生成的迭代序列内容。
你当前的代码仅覆盖原有列的取值,没有新增列的操作,迭代次数完全等于循环启动时df的列数,完全不会出现无限循环的问题。
即使你后续调整逻辑,在循环内新增列,新增的列也不会被纳入本次迭代的遍历范围,同样不会触发死循环。
验证示例
你可以运行下面的代码验证逻辑:
import pandas as pd # 初始化测试用df,仅包含a、b两列 df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]}) for col in df: print(f'当前处理列:{col}') # 循环内新增列 df[f'{col}_new'] = df[col] * 2 print(f'最终df的所有列:{list(df.columns)}')
运行输出如下:
当前处理列:a 当前处理列:b 最终df的所有列:['a', 'b', 'a_new', 'b_new']
可以看到迭代仅处理了初始的a、b两列,新增的a_new、b_new没有进入迭代序列。
内容的提问来源于stack exchange,提问作者Maximilian Suliga
相关产品推荐
相关产品推荐

