我在pandas中有一个数据框,其中索引是工作日。我想仅使用每个月的最后一天创建一个新的数据框,以及各列中的相应数据。我尝试了几种不同的方法但收效甚微,我不断收到的错误信息是:AttributeError:' DataFrame'对象没有属性' date'。
我的数据框中的索引标有'日期'。除了验证之外,我不知道该往哪里去。此外,此列中的日期还包括小时,分钟和秒......不确定是否重要。
以下是数据框的示例:
Date A B C
11/27/2015 00:00:00 5 2 4
11/30/2015 00:00:00 2 9 1
12/1/2015 00:00:00 6 1 8
12/2/2015 00:00:00 4 7 0
我希望显示结果
11/30/2015 00:00:00 2 9 1
我尝试过的一些代码如下:两者都有相同的错误。
prices = prices.resample('M', 'first')
prices = prices.index + pd.offsets.MonthEnd(0)
答案 0 :(得分:5)
In [1]: df = pd.DataFrame({'a':range(1000)}, index=pd.date_range('2014-1-1', periods=1000))
In [2]: df.index.days_in_month
Out[2]:
array([31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 28, 28, 28,
如果日期是在列中而不是索引中,那么您将执行df['Date'].dt.days_in_month
编辑:
如果你想要本月的最后一天,那么就在上面。相反,它听起来像你想要的? prices.index = prices.index + pd.offsets.MonthEnd(0)
答案 1 :(得分:1)
我对STACKOVERFLOW YESSS的第一次贡献
即使本月的最后一天不在你的原始时间序列中,以下内容仍然有用....为我工作
我可能会使用其他编码,但精神如下:
for i in range(df.size):
if i==0:
#get the first date whatever that is:
lastdayofmonthseries = pd.DataFrame(data=[df.ix[0][0]], index=[df.ix[0].name],columns=[df.columns[0]])
else:
if i< df.size-1:
# print SpotCloses.ix[i],SpotCloses.ix[i+1]
if df.ix[i].name.month!=df.ix[i+1].name.month:
#this will find the last day of each month in time series
TempDF=pd.DataFrame(data=[df.ix[i][0]],index=[df.ix[i].name],columns=[df.columns[0]])
lastdayofmonthseries=lastdayofmonthseries.append(TempDF)
else:
#check if its the last date and save it whatever that is
if i==df.size-1:
TempDF = pd.DataFrame(data=[df.ix[i][0]], index=[df.ix[i].name],columns=[df.columns[0]])
lastdayofmonthseries = lastdayofmonthseries.append(TempDF)