【问题标题】:Iteration to make OrderedDict迭代制作 OrderedDict
【发布时间】:2015-09-28 08:49:25
【问题描述】:

我正在迭代以制作条形图的 Ordered Dict。

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

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, 13):
    months.append(pivot_table[str(month)].astype(float).values)

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)])

但是,这将返回月份作为类型 int、大小 1、值 1 和月份作为大小为零的列表 []。不是我想要的!

这是我写条形图的地方:

output_file("stacked_bar.html")
bar = Bar(months, Companies, title="Number of Calls Each Month", palette = palette, legend = "top_right", width = 1200, height=900)
bar.add_tools(hover)


show(bar)

【问题讨论】:

  • pivot_table的索引不应该是整数吗?
  • @ScottHunter 是CompanyName,是一个字符串。
  • 在您的第一个代码片段中,您使用整数:Jan = pivot_table[1]...,但在循环中,您将这些整数转换为字符串:months.append(pivot_table[str(month)]... 只有其中一个可以工作
  • @tobias_k 哈哈!我现在知道了。问题是当它们是整数时,我得到了这个错误 TypeError: 'int' object is not iterable。如果我取出 str(m) 中的 str,你的回答似乎有效。

标签: python list for-loop iteration ordereddictionary


【解决方案1】:

您只是将月份名称映射到数字。相反,您必须在该特定索引处使用 months-list 的元素。另请注意,列表中的索引仍然从零开始。

months_dict = OrderedDict([('Jan', months[0]), 
                           ('Feb', months[1]), 
                           ..., 
                           ('Dec', months[11])])

您还可以通过对月份使用列表理解和对名称使用另一个列表,然后将这些列表压缩在一起,这样可以缩短此时间:

months = [pivot_table[m].astype(float).values for m in range(1, 13)]
names = ["Jan", "Feb", ..., "Dec"]
months_dict = OrderedDict(list(zip(names, months)))

【讨论】:

  • pivot_table的索引不应该是整数吗?
  • @ScottHunter 你可能是对的......它在第一个代码中是一个整数,然后在第二个代码中是一个字符串。
  • 感谢您的解释。对于months_dict 行,我没有一个名为values 的列表,你的意思是几个月吗?使用这个,我得到一个 KeyError: '1' and m is an int of 1 在我的变量资源管理器窗口中。
  • @jenryb 关于values:哎呀,我的错,应该是months。关于关键错误:您的问题尚不清楚pivot_table 中的索引是否应该是intstr...
  • @tobias_k 应该是还是现在?老实说,我对类型之间的所有差异感到非常困惑。索引是字符串,代码中的 CompanyName。我提交了制作数据透视表的代码,这有帮助吗?
猜你喜欢
  • 2013-05-09
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 2013-05-18
  • 2015-09-19
  • 2021-01-30
  • 2015-09-11
  • 1970-01-01
相关资源
最近更新 更多