我正在尝试查找是否可以在没有data.asfreq(MonthEnd())
创建的数据的情况下使用date_range
。
我想达到的目标。我使用以下代码运行csv查询:
import numpy as np
import pandas as pd
data = pd.read_csv("https://www.quandl.com/api/v3/datasets/FRED/GDPC1.csv?api_key=", parse_dates=True)
data.columns = ["period", "integ"]
data['period'] = pd.to_datetime(data['period'], infer_datetime_format=True)
然后,我想通过以下方式将频率分配给“期间”列:
tdelta = data.period[1] - data.period[0]
data.period.freq = tdelta
还有一些打印命令:
print(data)
print(data.period.freq)
print(data.dtypes)
返回值:
..........
270 1948-07-01 2033.2
271 1948-04-01 2021.9
272 1948-01-01 1989.5
273 1947-10-01 1960.7
274 1947-07-01 1930.3
275 1947-04-01 1932.3
276 1947-01-01 1934.5
[277 rows x 2 columns]
-92 days +00:00:00
period datetime64[ns]
integ float64
dtype: object
我还可以通过将其设为“索引”来解析原始的“ DATE”列:
data = pd.read_csv("https://www.quandl.com/api/v3/datasets/FRED/GDPC1.csv?api_key=", parse_dates=True, index_col='DATE')
我要做的只是将季度数据隐藏到每月行中。例如:
270 1948-07-01 2033.2
271 1948-06-01 NaN
272 1948-05-01 NaN
273 1948-04-01 2021.9
274 1948-03-01 NaN
275 1948-02-01 NaN
276 1948-01-01 1989.5
......and so on.......
我最终尝试使用
ts.asfreq(MonthBegin())
和ts.asfreq(MonthBegin(), method='pad')
来做到这一点。到目前为止没有成功。我有以下错误:NameError: name 'MonthBegin' is not defined
我的问题是,如果不使用
asfreq
创建框架,可以使用date_range
吗?以某种方式将日期列“传递”给函数。如果这不是解决方案,是否还有其他简便的方法可以将季度频率转换为每月频率? 最佳答案
使用TimeGrouper
:
import pandas as pd
periods = ['1948-07-01', '1948-04-01', '1948-01-01', '1947-10-01',
'1947-07-01', '1947-04-01', '1947-01-01']
integs = [2033.2, 2021.9, 1989.5, 1960.7, 1930.3, 1932.3, 1934.5]
df = pd.DataFrame({'period': pd.to_datetime(periods), 'integ': integs})
df = df.set_index('period')
df = df.groupby(pd.TimeGrouper('MS')).sum().sort_index(ascending=False)
编辑:您也可以使用
resample
代替TimeGrouper
:df.resample('MS').sum().sort_index(ascending=False)
关于python - Pandas 变频,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38080184/