这是我写的一个程序。我只是想知道为什么我的全局变量ABSDEV_SUM
在循环结束后没有打印。
# python_fitness_function
import pandas as pd
import itertools
infile_path = "C:\\Users\\Tim\\Dropbox\\Lela.com_DrBx\\APR14_query_work\\"
df = pd.DataFrame.from_csv(infile_path + "mp_viewed_item_AGG_affiliate_item_TOP_10.csv", sep=',', index_col=True)
groups = df.groupby('Affiliate_ID')
df_cameta = groups.get_group("cameta")
cols = list(df_cameta.columns)
while 'Affiliate_ID' in cols:
cols.remove('Affiliate_ID')
Motivator_list = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"]
index = 0
ABSDEV_SUM = 0
for i in cols:
column = df[i]
AbsDev = sum(abs(pair[1] - pair[0]) for pair in itertools.combinations(column, 2))
ABSDEV_SUM = ABSDEV_SUM + AbsDev
print "Motivator_" + Motivator_list[index] + "_Mean_AbsDev"
print AbsDev
index += 1
print ABSDEV_SUM
任何人都可以为我阐明这一点吗?对不起,如果这似乎是一个微不足道的步骤。
我在循环终止时得到这段代码:
File "~\APR14_query_work\python_fitness_function.py", line 37, in <module>
print "Motivator_" + Motivator_list[index] + "_Mean_AbsDev"
IndexError: list index out of range
[Finished in 0.4s with exit code 1]
我认为正在发生的事情是它经历了一个额外的循环迭代,抛出“超出范围”错误,然后根本不打印因为它终止。我不知道是不是这样,似乎是这样,但我无法确定原因。
我已经尝试在循环中改变我的线条,但无济于事。
答案 0 :(得分:0)
错误消息确实意味着Python终止程序,因为它检测到不可恢复的异常。
问题是index
中的值大于Motivator_list
中的元素数。
(一个典型的问题是一个接一个 - 你在最后一次迭代中创建一个刚刚超过列表末尾的索引,也许是因为你从1而不是0开始?在这种情况下,看起来很简单df_cameta.columns
包含的值多于Motivator_list
中的12个值。也许会使列表更长?或者根据需要动态增长?)