对于折线图的数据框中缺少 x 值,如何将 y 值设置为 0(matplotlib,pandas)

How do I set y value as 0 for missing x values in dataframe for line graph (matplotlib, pandas)

我有一个用于绘制折线图的数据框。数据框如下所示:

这是我的折线图目前的样子:

绘制折线图的代码:

ax  = df_dec18.set_index('Day').plot(figsize=(10,5), grid=True)
ax.set_xlabel('Day')
ax.set_ylabel('Number of reviews')
ax.set_title('Number of reviews published each month in year 2018 (September onwards) for HP 15q ds0058TU')
t = [df_dec18['Reviews_published'].min(), df_dec18['Reviews_published'].max()]
plt.xticks(range(0,31))

如何将第 7、8、9 天的 x 值设置为 0,因为那天没有发表评论。我想这样做,以便我的折线图 y 值在给定日期显示 0。

据我所知,您不能直接告诉 matplotlib 将零放入缺失数据中。 Matplotlib 只是忽略丢失的数据,并连接你有数据的点之间的线。如果您希望缺失数据为零,则应将其作为数据帧处理的一部分。

这样的处理可以是:

df_dec18 = df_dec18.set_index('Day')
df_new_dec18 = pd.DataFrame({"Day":range(1,32), "Reviews_published": 0}).set_index("Day")
df_new_dec18["Reviews_published"]=df_dec18["Reviews_published"]
df_new_dec18.fillna(0, inplace=True)

首先,我将“Day”列作为数据框的索引。您正在处理时间序列(我猜),我认为使用您的日期作为索引更方便。然后我创建了一个新的 df,这次是 12 月的一整天,而不仅仅是那些你有数据的日子。同样,当您处理时间序列时,我相信这是处理数据框的更正确和“干净”的方式。此数据框也使用“日”作为索引。

然后我只是用 fillna 给你没有信息的日子补零。那么你的折线图就可以了。请注意,您将需要 ax = df_dec18.plot(figsize=(10,5), grid=True) 而不需要 set_index,因为“Day”列已经是索引。

P.S:下次,请将您的数据框示例放入内联(就像您的代码一样)而不是图像。对于您的线图,只需复制它 - 右键单击​​ juypter 和“复制图像”并将其粘贴到此处。不要共享整个屏幕。