簡體   English   中英

Pandas:asfreq 與時間序列的奇怪行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM