Python pandas绘制时间序列与差距

Ala*_*rik 5 python plot time-series 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()
Run Code Online (Sandbox Code Playgroud)

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

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

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

Sto*_*ica 5

尝试:

df.plot(x=df.index.astype(str))
Run Code Online (Sandbox Code Playgroud)

省略差距

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

编辑

使用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'))
...
Run Code Online (Sandbox Code Playgroud)

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