【问题标题】:Iteration and TypeError: 'int' object is not iterable迭代和类型错误:“int”对象不可迭代
【发布时间】:2015-07-09 15:22:37
【问题描述】:

我正在制作一个堆积条形图,其中 x 轴是公司名称,y 轴是调用次数,堆栈是月份。总时间段为一年。

我希望能够使用该代码还调用一个月的图表,其中堆栈是天,以及一周的图表,堆栈是天。因此,我试图使其更具可迭代性。

在我今年的工作代码中,我以这种方式获得条形图的月份:

Jan = pivot_table[1].astype(float).values
Feb = pivot_table[2].astype(float).values
Mar = pivot_table[3].astype(float).values
Apr = pivot_table[4].astype(float).values
May = pivot_table[5].astype(float).values
Jun = pivot_table[6].astype(float).values
Jul = pivot_table[7].astype(float).values
Aug = pivot_table[8].astype(float).values
Sep = pivot_table[9].astype(float).values
Oct = pivot_table[10].astype(float).values
Nov = pivot_table[11].astype(float).values
Dec = pivot_table[12].astype(float).values

然后我将月份写入OrderedDict

months = OrderedDict([('Jan', Jan), ('Feb', Feb), ('Mar', Mar), ('Apr',Apr), ('May',May), ('Jun',Jun),('Jul',Jul), ('Aug',Aug), ('Sep',Sep),('Oct',Oct),('Nov',Nov),('Dec',Dec)])

显然这并不理想。因此,我写了一个循环。

months=[]
for month in range(1,12): 
    months[month] = pivot_table[month].astype(float).values

这给出了一个错误IndexError: list assignment index out of range 所以我查找了错误,发现理想的方法是将值附加到列表中。我的下一步是尝试:

months=[]
for month in range(1,12): 
    months.append(pivot_table[month].astype(float).values)

并相应地更改OrderedDict

months = OrderedDict([('Jan', 1), ('Feb', 2), ('Mar', 3), ('Apr',4), ('May',5), ('Jun',6),('Jul',7), ('Aug',8), ('Sep',9),('Oct',10),('Nov',11),('Dec',12)])

这给出了错误TypeError: 'int' object is not iterable 这似乎是一个人们认为非常简单的错误,但即使在阅读了所有堆栈流答案之后,我也无法弄清楚如何修复它。我尝试将 pivot_table 行包含在 [] 和 [[]] 中,但这不起作用。我也试过这样做:

months=[]
for month in str(range(1,12)): 
    months.append(pivot_table[month].astype(float).values)

但是得到了这个错误KeyError: '[',如果我打印几个月,我会得到一个空列表,这让我觉得它没有正确迭代。

【问题讨论】:

  • 要获取1到12(包括)的数字,您需要使用range(1, 13) - 或者使用range(12)并在使用数字时加1。
  • 感谢您的关注。我将其更改为范围(1,13)。这给出了一个从 1 到 12 的列表,就像我想要的那样。仍然得到这个非常奇怪的关键错误。我不认为我在任何地方都叫括号!我从工作代码中改变的只是这个循环部分
  • 您能否在问题中包含TypeError: 'int' object is not iterable完整 回溯?在我看来,你的那个版本的代码实际上应该可以工作。
  • @mkrieger1 似乎我添加的 str() 摆脱了类型错误并给我留下了一个新的关键错误。我添加了回溯
  • 好的,谢谢,但我真的是指TypeError 的回溯。添加str() 绝对是错误的,因为现在您不会遍历 数字 1、2、3 等,而是遍历构成以印刷形式列出:[1, 等。

标签: python for-loop iteration typeerror keyerror


【解决方案1】:
str(range(1, 12)) == '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]'

因此

for month in str(range(1, 12))

将遍历 string 而不是预期的数组。试试吧

for month in range(1, 13):
    months.append(pivot_table[str(month)].astype(float).values)

(13 得到包括第 12 个索引)

【讨论】:

  • 我试过了,现在月份是一个值为 1 的 int,而月份是一个大小为零的列表 []
  • 是的,这也许并不出人意料。您是否有理由希望月份变量成为有序字典?
  • 我想订购它以便以正确的方式绘制它。我从这里bokeh.pydata.org/en/latest/docs/gallery/stacked_bar_chart.html 提取代码,只是想使用我自己的数据。如果有更好的方法,我愿意!
  • @pingul: 你怎么知道pivot_table 必须用str(month) 索引而不是month
  • @jenryb 然后我不确定您使用的 OrderedDict 是做什么用的。您确定您的第二次尝试不起作用吗? IE。 for month in range(1, 12): months.append(pivot_table[month].astype(float).values 这个 for 循环不应该崩溃。
猜你喜欢
  • 2021-03-02
  • 1970-01-01
  • 2022-12-06
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 2013-08-02
相关资源
最近更新 更多