date
0 09-2019
1 10-2019
2 11-2019
4 01-2020
5 02-2020
7 04-2020
我有一个熊猫数据帧dates
,就像上面一样——这不是以任何方式订购的。我将日期列设置为日期时间类型,并选择月份和年份,如下所示:
dates['date'] = pd.to_datetime(dates['date'], errors='ignore')
dates['date'] = dates['date'].dt.strftime("%m-%Y")
我想选择与给定日期最近的行,我这样设置:
latest_date = max(dates['date'])
latest_date = latest_date.strftime("%m-%Y")
这给了我05-2020
。如何使用nearest
方法从dates
中选择与latest_date
最近的日期?该示例的预期输出应该是04-2020
。
我试过这个:
dates.iloc[dates.index.get_loc(datetime.datetime(latest_date),method='nearest')]
但我得到了AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
。这是否意味着我没有正确转换日期列?
IIUC,您可以在列和所述latest_date
:之间的差异上使用idxmin
latest_date = '05-2020'
print (dates.loc[(pd.to_datetime(dates['date'])
-pd.to_datetime(latest_date)).abs().idxmin(),
'date'])
'04-2020'
注意:如果索引是排序的,它会更安全,结果也更可靠
#set 'date' as index
df = pd.read_clipboard(parse_dates=['date']).set_index('date')
#get the nearest date :
df.index.sort_values().asof('05-2020')
Timestamp('2020-04-01 00:00:00')