[英]Pandas: asfreq strange behavior with timeseries
我試圖在不改變值的情況下將月度時間序列轉換為年度規模。
import pandas as pd
df = pd.read_csv(url_inflation, delimiter='\t')
df.head()
date value
0 2019-09 -0.0016
1 2019-08 -0.0024
2 2019-07 0.0020
3 2019-06 0.0004
4 2019-05 0.0034
然后我將日期列轉換為日期時間格式並將其設置為索引:
df['date'] = pd.to_datetime(df.date, yearfirst=True, format='%Y-%m')
df.set_index('date', inplace=True)
看起來索引是正確的:
df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 345 entries, 2019-09-01 to 1991-01-01
Data columns (total 1 columns):
value 345 non-null float64
dtypes: float64(1)
memory usage: 5.4 KB
當我使用 asfreq 時,它會輸出一個帶有 DatetimeIndex 的空數據幀:
df.asfreq(freq='A')
date value
df.asfreq(freq='A').info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 0 entries
Freq: A
Data columns (total 2 columns):
date 0 non-null object
value 0 non-null float64
dtypes: float64(1), object(1)
memory usage: 0.0+ bytes
使用 groupby 時似乎有效:
df1=df.groupby(pd.Grouper(level='date', freq='A')).nth(11)
df1.tail()
date value
2014-12-31 0.0262
2015-12-31 0.0077
2016-12-31 0.0040
2017-12-31 0.0042
2018-12-31 0.0084
我錯過了什么?
我認為您需要在使用asfreq()
之前先對索引進行排序。
嘗試:
df = df.sort_index().asfreq(freq='A')
或者:使用resample()
df = df.resample('A').asfreq()
使用freq='AS'
作為年初。
編輯1:
您還可以使用.agg()
到.resample()
來獲得預期的結果。
df = df.resample('AS').agg('sum')
輸出:
value
date
2017-01-01 3.0018
2018-01-01 2.0018
2019-01-01 1.0018
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.