删除缺失值的插值时间序列图

Posted

技术标签:

【中文标题】删除缺失值的插值时间序列图【英文标题】:Remove interpolation Time series plot for missing values 【发布时间】:2016-07-28 02:57:48 【问题描述】:

我正在尝试绘制时间序列数据,但我遇到了一些问题。

我正在使用此代码:

from matplotlib import pyplot as plt
plt.figure('Fig')
plt.plot(data.index,data.Colum,'g', linewidth=2.0,label='Data')

我明白了:

但我不想要缺失值之间的插值!

我怎样才能做到这一点?

【问题讨论】:

那么你只想要一个散点图吗? IE。缺失值之间没有线? 我猜你要么想要一个散点图,就像@Sam 已经说过的那样,要么你想改变你的 X 轴以使其没有间隙 - 对吗? 【参考方案1】:

由于您使用的是 pandas,因此您可以执行以下操作:

import pandas as pd
import matplotlib.pyplot as plt

pd.np.random.seed(1234)
idx = pd.date_range(end=datetime.today().date(), periods=10, freq='D')
vals = pd.Series(pd.np.random.randint(1, 10, size=idx.size), index=idx)
vals.iloc[4:8] = pd.np.nan
print vals

这里是一个来自 DataFrame 的列的示例,带有DatetimeIndex

2016-03-29    4.0
2016-03-30    7.0
2016-03-31    6.0
2016-04-01    5.0
2016-04-02    NaN
2016-04-03    NaN
2016-04-04    NaN
2016-04-05    NaN
2016-04-06    9.0
2016-04-07    1.0
Freq: D, dtype: float64

要在数据为NaN 的情况下绘制不带日期的图表,您可以执行以下操作:

fig, ax = plt.subplots()
ax.plot(range(vals.dropna().size), vals.dropna())
ax.set_xticklabels(vals.dropna().index.date.tolist());
fig.autofmt_xdate()

应该产生这样的情节:

这里的技巧是在调用.plot 方法时将日期替换为不触发matplotlib 内部日期处理的某个范围的值。

稍后,当绘图完成后,将刻度标签替换为实际日期。 或者,调用.autofmt_xdate() 使标签可读。

【讨论】:

以上是关于删除缺失值的插值时间序列图的主要内容,如果未能解决你的问题,请参考以下文章

数据分析缺失值处理(Missing Values)——删除法填充法插值法

Java 线性插值填充缺失点

Java 线性插值填充缺失点

R中缺失数据的线性插值

pandas(12):数据清洗(缺失值)

pandas dataframe缺失值(np.nan)处理:识别缺失情况删除0值填补均值填补中位数填补加缺失标签插值填充详解及实例