微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python pandas绘制时间序列与差距

我试图用TimeStamp indizes绘制一个pandas DataFrame,它的indizes中有一个时间间隔.使用pandas.plot()会导致前一段的最后一个TimeStamp与下一段的第一个TimeStamp之间的线性插值.我不想要线性插值,也不想在两个日期段之间留空空间.有没有办法做到这一点?

假设我们有一个带有TimeStamp的DataFrame:

>>> import numpy as np
>>> import pandas as pd
>>> import matplotlib.pyplot as plt
>>> df = pd.DataFrame(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
>>> df = df.cumsum()

现在让我们花两个时间块来绘制它:

>>> df = pd.concat([df['Jan 2000':'Aug 2000'], df['Jan 2001':'Aug 2001']])
>>> df.plot()
>>> plt.show()

结果图具有连接包围间隙的TimeStamps的插值线.我无法弄清楚如何在这台机器上传图片,但是Google Groups的这些图片显示了我的问题(interpolated.jpg,no-interpolation.jpg和no gaps.jpg).我可以重新创建第一个,如上所示.第二个是通过用NaN替换所有间隙值来实现的(参见this question).如何省略时间间隔的第三个版本?

解决方法:

尝试:

df.plot(x=df.index.astype(str))

Skip the gap

您可能想要自定义刻度和刻度标签.

编辑

使用pandas 0.17.1和numpy 1.10.4对我有用.

您真正需要的是一种将DatetimeIndex转换为非日期时间的另一种类型的方法.为了获得有意义的标签,我选择了str.如果x = df.index.astype(str)不适用于你的pandas / numpy /你可以尝试其他选项的组合:

df.index.to_series().dt.strftime('%Y-%m-%d')
df.index.to_series().apply(lambda x: x.strftime('%Y-%m-%d'))
...

我意识到重置索引是没有必要的,所以我删除了那部分.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐