使用Pandas将每日数据重新采样为每月(日期格式)

ssl*_*k88 4 python pandas

我想在Pandas DataFrame中重新采样每日到每月的一些数据.我是大熊猫的新手,也许我需要首先格式化日期和时间,然后才能做到这一点,但我没有找到一个好的教程,以正确的方式处理导入的时间序列数据.我发现的一切都是自动从Yahoo或Quandl导入数据.

以下是我在DataFrame中的内容:dataframe segment screenshot

这是我用来创建DataFrame的代码:

#Import excel file into a Pandas DataFrame
df = pd.read_excel(open('2016_forex_daily_returns.xlsx','rb'), sheetname='Sheet 1')

#Calculate the daily returns
df['daily_ret'] = df['Equity'].pct_change()

# Assume an average annual risk-free rate over the period of 5%
df['excess_daily_ret'] = df['daily_ret'] - 0.05/252
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解我需要对DataFrame中的"日期"和"时间"列做什么,以便我可以重新采样吗?

jez*_*ael 8

对于创建DataFrame可以使用:

df = pd.read_excel('2016_forex_daily_returns.xlsx', sheetname='Sheet 1')
print (df)
        Date      Time  Equity
0 2016-01-03  22:16:22  300.38
1 2016-01-04  22:16:00  300.65
2 2016-01-05  14:26:02  301.65
3 2016-01-06  19:08:13  302.10
4 2016-01-07  18:39:00  302.55
5 2016-01-08  22:16:04  308.24
6 2016-01-11  02:49:39  306.69
7 2016-01-14  15:46:39  307.93
8 2016-01-19  15:56:31  308.18
Run Code Online (Sandbox Code Playgroud)

我认为你可以先插入to_datetimedate然后使用resample一些聚合函数,如:summean

df.Date = pd.to_datetime(df.Date)
df1 = df.resample('M', on='Date').sum()
print (df1)
             Equity  excess_daily_ret
Date                                 
2016-01-31  2738.37          0.024252

df2 = df.resample('M', on='Date').mean()
print (df2)
                Equity  excess_daily_ret
Date                                    
2016-01-31  304.263333          0.003032

df3 = df.set_index('Date').resample('M').mean()
print (df3)
                Equity  excess_daily_ret
Date                                    
2016-01-31  304.263333          0.003032
Run Code Online (Sandbox Code Playgroud)