oym*_*onk 7 python plot matplotlib pandas
我有一个数据集:
367235 419895 992194
1999-01-11 8 5 1
1999-03-23 NaN 4 NaN
1999-04-30 NaN NaN 1
1999-06-02 NaN 9 NaN
1999-08-08 2 NaN NaN
1999-08-12 NaN 3 NaN
1999-08-17 NaN NaN 10
1999-10-22 NaN 3 NaN
1999-12-04 NaN NaN 4
2000-03-04 2 NaN NaN
2000-09-29 9 NaN NaN
2000-09-30 9 NaN NaN
Run Code Online (Sandbox Code Playgroud)
当我绘制它时,使用plt.plot(df, '-o')我得到这个:
但我想要的是将每列的数据点连接成一行,如下所示:
我知道matplotlib不会连接由NaN值分开的数据点.我看了所有的选项,这里用于处理丢失的数据,但所有的人都将从根本上歪曲在数据帧中的数据.这是因为数据帧中的每个值都代表一个事件; 如果我尝试用标量值替换NaN或使用插值选项,我会得到一堆实际上不在我的数据集中的点.这是插值的样子:
df_wanted2 = df.apply(pd.Series.interpolate)
如果我尝试使用,dropna我将丢失数据帧中的整行\列,这些行包含有价值的数据.
有谁知道连接我的点的方法?我怀疑我需要从数据框中提取单个数组并绘制它们,就像这里给出的建议一样,但这似乎很多工作(我的实际数据框要大得多.)有没有人有解决方案?
piR*_*red 11
使用interpolate方法和参数'index'
df.interpolate('index').plot(marker='o')
Run Code Online (Sandbox Code Playgroud)
另类答案
plot 后 iteritems
for _, c in df.iteritems():
c.dropna().plot(marker='o')
Run Code Online (Sandbox Code Playgroud)
额外信用
仅从第一个有效索引插入到每列的最后一个有效索引
for _, c in df.iteritems():
fi, li = c.first_valid_index(), c.last_valid_index()
c.loc[fi:li].interpolate('index').plot(marker='o')
Run Code Online (Sandbox Code Playgroud)