如何不绘制缺失的时期
How not to plot missing periods
我正在尝试绘制时间序列数据,其中某些时期没有数据。数据已加载到数据框中,我正在使用 df.plot()
绘制它。问题是缺失的时间段在绘图时被连接起来,给人的印象是该时间段内存在价值,但事实并非如此。
这是问题的一个例子
9 月 1 日至 9 月 8 日以及 9 月 9 日至 9 月 25 日之间没有数据,但数据的绘制方式似乎是该时期的值。
我希望在那段时间可视化零值,或者根本没有值。怎么做?
需要说明的是,我没有 [9 月 1 日、9 月 8 日]、[9 月 9 日、9 月 29 日] 期间的 NaN 值,但根本没有数据(甚至在时间索引中也没有)。
您应该使用 NaN 值将缺失的日期添加到您的数据框中。然后,在绘制时,这些 NaN 会断开线条——您将得到几条线段,它们之间有空句点。
This answer 最好地解释了如何将缺失的日期添加到数据框中。总而言之,这应该可以解决问题:
df = df.reindex(pd.DatetimeIndex(df.index), fill_value=NaN)
考虑 pd.Series
s
s = pd.Series(
np.arange(10), pd.date_range('2016-03-31', periods=10)
).replace({3: np.nan, 6: np.nan})
s.plot()
您可以看到 np.nan
被跳过了。
然而:
s.fillna(0).plot()
0
没有跳过。
我建议s.replace(0, np.nan).plot()
我正在尝试绘制时间序列数据,其中某些时期没有数据。数据已加载到数据框中,我正在使用 df.plot()
绘制它。问题是缺失的时间段在绘图时被连接起来,给人的印象是该时间段内存在价值,但事实并非如此。
这是问题的一个例子
9 月 1 日至 9 月 8 日以及 9 月 9 日至 9 月 25 日之间没有数据,但数据的绘制方式似乎是该时期的值。
我希望在那段时间可视化零值,或者根本没有值。怎么做?
需要说明的是,我没有 [9 月 1 日、9 月 8 日]、[9 月 9 日、9 月 29 日] 期间的 NaN 值,但根本没有数据(甚至在时间索引中也没有)。
您应该使用 NaN 值将缺失的日期添加到您的数据框中。然后,在绘制时,这些 NaN 会断开线条——您将得到几条线段,它们之间有空句点。
This answer 最好地解释了如何将缺失的日期添加到数据框中。总而言之,这应该可以解决问题:
df = df.reindex(pd.DatetimeIndex(df.index), fill_value=NaN)
考虑 pd.Series
s
s = pd.Series(
np.arange(10), pd.date_range('2016-03-31', periods=10)
).replace({3: np.nan, 6: np.nan})
s.plot()
您可以看到 np.nan
被跳过了。
然而:
s.fillna(0).plot()
0
没有跳过。
我建议s.replace(0, np.nan).plot()