将pandas数据框中的日常数据转换为月度数据

5

我的数据框中有每日股票数据:

       Date       AAPL      NFLX       INTC  
0 2008-01-02  27.834286  3.764286  25.350000    
1 2008-01-03  27.847143  3.724286  24.670000    
2 2008-01-04  25.721428  3.515714  22.670000   
3 2008-01-07  25.377142  3.554286  22.879999    
4 2008-01-08  24.464285  3.328571  22.260000  

我希望能够使用上面数据框中每月的最后一天来计算月度收益。通过搜索发现,重新采样(resample)是选择每月最后一个交易日的最佳方法。但这似乎不起作用:

df.set_index('Date')  
m1= df.resample('M')
print(m1)

我遇到了这个错误:

类型错误:只有 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 才是有效的,但得到了“Index”的实例

所以我认为这意味着 set_index 没有起作用?

我还尝试过:

df= df.reset_index().set_index('Date')  
m1= df.resample('M')
print(m1)

但我收到了与上述相同的错误信息。非常感谢您的帮助。

1
set_index 不带 inplace 标志是非原地操作。这就是为什么你的第一次尝试不起作用的原因,因为你实际上没有改变你的数据框。 - user3483203
3
尝试使用df.set_index('Date').resample('M').last()。该代码可将数据框按照日期设置索引后,对每个月进行重采样,并保留每个月的最后一行数据。 - user3483203
尝试了df.set_index('Date', inplace=True)和df.resample('M'),但仍然出现相同的错误。还尝试了您之前的建议,df.set_index('Date').resample('M').last(),但目前为止没有成功。 - Eksana Stasis
对于我的导入,我有以下代码: import pandas as pd import numpy as np import datetime from pandas import DataFrame - Eksana Stasis
1
哎呀!成功了,Vaishali,非常感谢你对我的耐心!真的很感激 :-) - Eksana Stasis
显示剩余6条评论
1个回答

13

你的索引不是一个 DatetimeIndex。但你可以将它转换为 DatetimeIndex:

df.set_index('Date', inplace=True)
df.index = pd.to_datetime(df.index)
df.resample('1M').mean()
#                 AAPL      NFLX    INTC
#Date                                   
#2008-01-31  26.248857  3.577429  23.566

仅针对数据框中的一列,平均值或总和怎么处理? - Windy Day

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接