我有一个Dataframe,我正在尝试运行两个不同的应用操作:
last_consumption_of_year_index = df.loc[(df['date'].dt.month == 12) &
(df['date'].dt.day == 31) &
(df['date'].dt.hour == 23) &
(df['date'].dt.minute == 30)].index[0]
df.loc[:last_consumption_of_year_index]['date'] = df.loc[:last_consumption_of_year_index]['date'].apply(lambda x: x['date'].replace(year=current_year-1))
df.loc[last_consumption_of_year_index+1:]['date'] = df.loc[last_consumption_of_year_index+1:]['date'].apply(lambda x: x['date'].replace(year=current_year))
我想要做的是将时间戳的年份替换为current_year-1
以及last_consumption_of_year_index
之前的所有内容,并将current_year
替换为之后的所有内容。
但是我收到了错误:
TypeError: 'Timestamp' object is not subscriptable
在lambdas里面。我该如何访问日期对象?
此外,如果这不是最好的方法,那么有人会提出更好的方法吗?
答案 0 :(得分:2)
我相信你的lambda函数中可能存在一个错误,并且存在['date']。尝试将lambda x: x['date'].replace(year=current_year-1)
替换为lambda x: x.replace(year=current_year-1)
,因为您的方法apply()
位于Serie而不是Dataframe上。
与lambda x: x['date'].replace(year=current_year)
lambda x: x.replace(year=current_year)
相同