基于现有值的插值将时间条目添加到Pandas数据系列

时间:2015-10-10 23:02:55

标签: python pandas time interpolation series

我有一个年度熊猫数据系列,如下所示:

Year          Price
1940-12-31    33.85
1941-12-31    33.85
1942-12-31    33.85
1943-12-31    33.85
1944-12-31    33.85
1945-12-31    34.71
1946-12-31    34.71
1947-12-31    34.71
1948-12-31    34.71
1949-12-31    31.69
1950-12-31    34.72

我是pandas数据系列的新手,但我相信日期是一个索引,因为当我打印表时,它表示只有一列。

我想将其更改为每月,然后根据从一个点到下一个点的线性进展填充缺失月份的插值数据。例如,这里是1949年的一个样本,其中包括缺失的月份和插值:

Date        Price
1948-12-31  34.71
1949-01-31  34.46
1949-02-28  34.21
1949-03-31  33.96
1949-04-30  33.70
1949-05-31  33.45
1949-06-30  33.20
1949-07-31  32.95
1949-08-31  32.70
1949-09-30  32.45
1949-10-31  32.19
1949-11-30  31.94
1949-12-31  31.69

这些1949年内插值的公式是([1949年底的价格] - [1948年底的价格])/ 12 +上个月的价格

我是Pandas和python的新手,所以请原谅我,如果其他地方已经提出这个问题。

1 个答案:

答案 0 :(得分:2)

以下代码将完成这项工作:

df['Price'].resample('M').interpolate()

将df替换为您的DataFrame名称。 resample('M')将系列的频率更改为每月。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html

interpolate()默认情况下使用线性插值,这是您想要的,但它有许多其他可用选项。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.interpolate.html

假设你有一个使用DatetimeIndex正确编入索引的DataFrame,这将会有效(如果我理解你的描述,情况就是如此)。您可以通过

检查是否确实如此
df.index

如果索引设置正确,您将看到类似输出的内容:

DatetimeIndex(['1940-12-31', '1941-12-31', '1942-12-31', '1943-12-31',
           '1944-12-31', '1945-12-31', '1946-12-31', '1947-12-31',
           '1948-12-31', '1949-12-31', '1950-12-31'],
          dtype='datetime64[ns]', freq='A-DEC', tz=None)