Select 两个日期之间的行 - 最近 3 个月 -
Select rows between two dates - recent 3 month period -
我有一个数据框,我正在尝试 select 两个日期(最近 3 个月期间)之间的行,我找到了这个解决方案 here。
这是我的数据框的头部
week storeA storeB storeC storeD storeE
0 2014-05-04 2643 8257 3893 6231 1294
1 2014-05-11 6444 5736 5634 7092 2907
2 2014-05-18 9646 2552 4253 5447 4736
3 2014-05-25 5960 10740 8264 6063 949
4 2014-06-01 7412 7374 3208 3985 3023
首先,我将数据框的 'week' 列转换为 datetime64[ns] 格式:
df['week'] = pd.to_datetime(df['week'])
我得到这样的开始和结束日期
start_date = pd.to_datetime(df.tail(1)['week'] - pd.DateOffset(months=3))
end_date = pd.to_datetime(df.tail(1)['week'])
# start_date : 199 2017-11-25 Name: week, dtype: datetime64[ns]
#end_date : 199 2018-02-25 Name: week, dtype: datetime64[ns]
然后我尝试 select 行:
mask = (df['week'] > start_date) & (df['week'] <= end_date)
df.loc[mask]
这里我得到这个错误:
ValueError: Can only compare identically-labeled Series objects
我尝试将日期写成字符串并且有效:
mask = (df['week'] > '2017-11-25') & (df['week'] <= '2018-02-25')
df.loc[mask]
我尝试将开始日期转换为字符串并且有效
start_date = str(start_date)[6:16]
end_date = str(end_date)[6:16]
那么,是什么导致了错误?
按照你的代码,我发现 'start_date' 和 'end_date' 的数据类型都是系列(不是像 df['week'] 这样的时间戳)。检查方式:
type(df['week'][0]), type(start_date)
那就没法比了。
您可以试试这个代码:
id = start_date.index[0]
start_date = pd.to_datetime(start_date[id])
注意:“id”存储索引(根据您的数据,它是 199。)
我有一个数据框,我正在尝试 select 两个日期(最近 3 个月期间)之间的行,我找到了这个解决方案 here。
这是我的数据框的头部
week storeA storeB storeC storeD storeE
0 2014-05-04 2643 8257 3893 6231 1294
1 2014-05-11 6444 5736 5634 7092 2907
2 2014-05-18 9646 2552 4253 5447 4736
3 2014-05-25 5960 10740 8264 6063 949
4 2014-06-01 7412 7374 3208 3985 3023
首先,我将数据框的 'week' 列转换为 datetime64[ns] 格式:
df['week'] = pd.to_datetime(df['week'])
我得到这样的开始和结束日期
start_date = pd.to_datetime(df.tail(1)['week'] - pd.DateOffset(months=3))
end_date = pd.to_datetime(df.tail(1)['week'])
# start_date : 199 2017-11-25 Name: week, dtype: datetime64[ns]
#end_date : 199 2018-02-25 Name: week, dtype: datetime64[ns]
然后我尝试 select 行:
mask = (df['week'] > start_date) & (df['week'] <= end_date)
df.loc[mask]
这里我得到这个错误:
ValueError: Can only compare identically-labeled Series objects
我尝试将日期写成字符串并且有效:
mask = (df['week'] > '2017-11-25') & (df['week'] <= '2018-02-25')
df.loc[mask]
我尝试将开始日期转换为字符串并且有效
start_date = str(start_date)[6:16]
end_date = str(end_date)[6:16]
那么,是什么导致了错误?
按照你的代码,我发现 'start_date' 和 'end_date' 的数据类型都是系列(不是像 df['week'] 这样的时间戳)。检查方式:
type(df['week'][0]), type(start_date)
那就没法比了。
您可以试试这个代码:
id = start_date.index[0]
start_date = pd.to_datetime(start_date[id])
注意:“id”存储索引(根据您的数据,它是 199。)