我有一张excel表,其中包含我想要在三个不同时间(24,48和72h)绘制的三件事:
test = pd.read_excel(excel_sheet_location)
times = ('24h', '48h', '72h')
并且数据样本如下所示:
thing1 thing2 Time
38.655 8.655 24h
18.385 8.655 24h
26.013 8.655 24h ...
所以我尝试使用以下代码为每个时间点制作3个直方图:
for i in range(2):
fig, ax = plt.subplots(1, 2, sharex=True, sharey=True, figsize=(8,3))
idx = (test["Time"] == t)
ax[i].hist(test.ix[idx,'thing1'],range(51),normed=True,linewidth=0)
然而,它会绘制第一个直方图,然后抛出这些错误:
pandas/index.pyx in pandas.index.IndexEngine.get_value (pandas/index.c:3113)()
pandas/index.pyx in pandas.index.IndexEngine.get_value (pandas/index.c:2844)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:3704)()
pandas/hashtable.pyx in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:7224)()
pandas/hashtable.pyx in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:7162)()
KeyError: 0
任何人都有任何想法,为什么它这样做?实际数据很好(我已经通过交换工作表中的值来检查并发生相同的错误。)
答案 0 :(得分:1)
不确定我是否可以关注您的错误(可能您只需要更新到较新版本的pandas),或者您从times
到t
做了一些奇怪的事情。
如果我使用:
times = ['24h','48h']
# Create the figure outside the loop
fig, ax = plt.subplots(1, 2, sharex=True, sharey=True, figsize=(8,3))
# If you want 3 plots you need to change this to range(3) and the subplots above to (1, 3, ...)
for i in range(2):
# Index the times list instead of the ominous t variable
idx = (test["Time"] == times[i])
ax[i].hist(test.ix[idx,'thing1'], range(51), normed=True, linewidth=0)
plt.show()
它有效(只是一些随机数据):