我使用嵌套的for循环从数据帧中读取选择性数据。然后,我需要对这些选择性数据实现一些数学公式。出于这个原因,我实现了一个动态逻辑,它将数据的索引和列号分隔在一个列表"idx“和"cols”中。但是,我应用的用于读取此数据的嵌套For循环执行的次数出乎意料地多。
以下是示例代码及其输出:
idx = [1, 2]
cols = [2, 2]
count = 0
def run_imputation():
global count
for i in idx:
for col in cols:
count += 1
print(count)
dfClean.iloc[i, col] = tempOut[i,col] #Need to do such and more computations
origVal.append(dfClean_Orig.iloc[i, col])
impuVal.append(dfClean.iloc[i, col])
%timeit run_imputation()
OUTPUT:
1
2
......
32444所以我的问题是,为什么是For循环执行32444次,而它应该只执行4次。除了Python中复杂的for循环之外,还有什么更好的方法来进行如下所示的选择性数据计算吗?
发布于 2021-02-04 06:54:43
您尚未显示完整的代码。因此,我只根据你的编码风格来回答。我认为您会多次运行run_imputation()函数。通过不使用任何全局变量,可以避免看到错误的迭代次数。
例如,您可以尝试更改您的编码样式,如下所示:
idx = [1, 2]
cols = [2, 2]
def run_imputation(idx, cols):
count = 0
for i in idx:
for col in cols:
count += 1
print(count)
dfClean.iloc[i, col] = tempOut[i,col] # Need to do such and more computations
origVal.append(dfClean_Orig.iloc[i, col])
impuVal.append(dfClean.iloc[i, col])发布于 2021-02-04 07:16:54
对于问题的第一部分:它运行32444次而不是4次,因为您正在使用%timeit魔术命令和您的函数调用run_imputation()。
如果您不想测量函数的执行时间,则不需要使用%timeit。
您可以在此处找到有关该主题的更多详细信息:What is %timeit in python?
这回答了主要问题:"Python For循环执行意外数量的循环“
你问题的第二部分对我来说不是很清楚。如果您能详细说明,我也可以提供帮助。
发布于 2021-02-04 07:27:09
而不是:%timeit run_imputation()
我使用: run_imputation()
https://stackoverflow.com/questions/66036852
复制相似问题