【问题标题】:For Loop Stops After Only 10 Iterations PythonFor 循环仅在 10 次迭代 Python 后停止
【发布时间】:2020-07-13 21:13:00
【问题描述】:

晚上好, 我想知道是否有人可以提供有关我遇到的问题的见解。我写了一个简单的 for 循环,但它只在 10 次迭代后就停止了。任何想法或想法将不胜感激,谢谢。以下是我的代码:

'''

import pandas as pd
import numpy as np

directory1 = pd.read_csv('/media/Thesis_Maps//testing/JM_rev5.csv', header=None, skiprows=[-1], encoding='utf-8')

results = np.zeros((len(directory_DOE), 3) )

for i in directory1:
    x1=directory1.iloc[i,1]
    y1=x1+5
    results[i,0] = y1

【问题讨论】:

  • 请打印 directory1.shape
  • 我输入了“k1=directory1.shape”,得到的值为 (200,10)。
  • 请提供minimal reproducible example。我怀疑这个问题是由于for i in directory1: 迭代列。这里甚至需要循环吗?
  • pandas 的工作方式与您的预期不同。它迭代列,您有 10 列。您必须使用 for i in range(len(directory1)): 才能获得 200 次迭代。或者也许更好地使用for index, row in directory1.iterrows(): y1 = row[1] + 5 或者没有迭代results[:,0] = directory1[1] + 5
  • 成功了!使用“for i in range(len(directory1)):”修复它,它现在迭代所有 200 行。谢谢你好先生或妈妈:)

标签: python pandas numpy loops for-loop


【解决方案1】:

在您的示例中,pandas 迭代列,而不是行。

您必须使用directory1.iterrows()(或类似功能)

for index, row in directory1.iterrows():
    results[index, 0] = row[1] + 5

但你可以在没有迭代的情况下做同样的事情

results[:,0] = directory1[1] + 5

例子

import pandas as pd
import numpy as np
import random

random.seed(1) # random will create always the same values

directory1 = pd.DataFrame(
    [[random.randint(0, 10) for x in range(10)] for x in range(200)],
)

print('shape:', directory1.shape)
print(directory1.head())

# ----

results = np.zeros((len(directory1), 3))

for index, row in directory1.iterrows():
    results[index, 0] = row[1] + 5

print(results[:5])

# ---    

results = np.zeros((len(directory1), 3))

results[:,0] = directory1[1] + 5

print(results[:5])

结果

shape: (200, 10)

   0   1  2   3  4  5  6   7   8  9
0  2   9  1   4  1  7  7   7  10  6
1  3   1  7   0  6  6  9   0   7  4
2  3   9  1   5  0  0  0  10   8  0
3  6  10  3   6  0  8  3   7   7  8
4  3   5  3  10  3  7  4   0   6  8

# ---    

[[14.  0.  0.]
 [ 6.  0.  0.]
 [14.  0.  0.]
 [15.  0.  0.]
 [10.  0.  0.]]

# ---    

[[14.  0.  0.]
 [ 6.  0.  0.]
 [14.  0.  0.]
 [15.  0.  0.]
 [10.  0.  0.]]

【讨论】: