通过日志文件进行组合,我为失败的进程,日期和机器建立了一个数据框。我的目标是为每个过程提供一个条形图,其中日期为x轴,每天的失败计数是使用.size()计算的。
grouped = fail_df.groupby(['Process', 'Date']).size
print(fail_df.groupby(['Process', 'Date']).size())
准确显示我想要的内容。打印的第一行是
Process Date
10HzTail 2019-06-16 1
1553Prox 2019-06-16 3
2019-06-17 8
2019-06-18 10
2019-06-19 2
2019-06-20 5
Cthread2 2019-06-18 1
2019-06-20 1
我尝试迭代为
for name, row in grouped:
print(name)
print(row)
给出此错误输出
dtype: int64
Traceback (most recent call last):
File "./allpandas", line 140, in <module>
main()
File "./allpandas", line 125, in main
for name, row in grouped:
TypeError: 'int' object is not iterable
我想依次处理每个流程。我希望将日期和计数反馈到该流程的条形图中。
是否有办法对此进行迭代,或者我在分组中犯了一个根本性的错误?
更新
我尝试了建议的size(),但仍然遇到相同的错误。
grouped = fail_df.groupby(['Process', 'Date']).size()
for name, row in grouped:
print(name)
print(row)
还有其他建议吗?
答案 0 :(得分:0)
您是否使用matplotlib
?
如果是这样,如果我了解您想要的内容,则无需循环,可以使用pandas.DataFrame.plot来为您完成所有工作。
grouped = fail_df.groupby(['Process', 'Date']).size()
axis = grouped.plot(kind='bar')
plt.show()
plt
是通常的import matplotlib.pyplot as plt
。
如果标签太大,则可能需要将其固定在每个条的底部。
您的错误来自grouped
是Series
而不是DataFrame
的事实,因此您不能以这种方式进行迭代。迭代序列仅返回值。您应该这样做:
for value in grouped:
print(value)
查看尺寸,但丢失了索引标签。要获得索引标签,解决方案是:
for name, row in zip(grouped.index, grouped):
print(name)
print(row)