![](/img/trans.png)
[英]How to use Pandas Series to plot two Time Series of different lengths/starting dates?
[英]Plot values of two time series with different dates
我有两个时间序列。 每个时间序列(s1和s2)由一个值列表和一个对应的时间列表(例如时间戳等)表示。 我正在使用python,因此例如:
s1_values = [6,8,6,3,7,9] # len(s1_values) == len(s1_times)
s1_times = [1,3,6,7,8,12]
s2_values = [3,8,7,2,5,4,6,2] # len(s2_values) == len(s2_times)
s2_times = [2,4,5,7,8,9,10,13]
我想看到两个时间序列s1和s2之间的关系,因此我希望能够使用Matplotlib将s1_values(在x轴上)相对于s2_values(在y轴上)绘制,但是由于两个时间序列是时间不对,我不知道该怎么做。
也许对于时间序列有一些通用的方法,但是我不知道它们。
您可以使用pandas
( docs ),它非常适合时间序列数据。 在这种情况下,您将制作两个数据框,然后对其进行合并和排序。
merge
为您提供了合并的“时间”系列( 此处有多种合并方式),可将nan
值插入到该时间没有值的value列中。 然后,按共享的“ Time
列对此进行排序。 df.fillna
函数( docs )接受method
参数,如果该参数是ffill
或pad
用最后一个有效值填充空白,如果bfill
用下一个有效值填充空白。 或者,您可以使用df.interpolate
对缺失值( docs )进行线性插值。
方便的是, pandas
包装了matplotlib
因此您可以直接从数据框中进行绘制。
import matplotlib.pyplot as plt
import pandas as pd
s1_values = [6,8,6,3,7,9]
s1_times = [1,3,6,7,8,12]
s2_values = [3,8,7,2,5,4,6,2]
s2_times = [2,4,5,7,8,9,10,13]
df1 = pd.DataFrame(zip(s1_times, s1_values), columns=['Time', 's1 values'])
df2 = pd.DataFrame(zip(s2_times, s2_values), columns=['Time', 's2 values'])
df = df1.merge(df2, how='outer', on='Time', sort='Time')
df.fillna(method='pad', inplace=True) # or df.interpolate(inplace=True)
df.plot(kind='scatter', x='s1 values', y='s2 values')
plt.show()
使用fillna(method='ffill')
使用interpolate()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.