我有一个年度熊猫数据系列,如下所示:
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的新手,所以请原谅我,如果其他地方已经提出这个问题。
答案 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)