date
0 09-2019
1 10-2019
2 11-2019
4 01-2020
5 02-2020
7 04-2020
我有一个像上面一样的熊猫数据框dates
-这没有任何顺序。我将date列设置为datetime类型,并仅选择月份和年份,如下所示:
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'
。这是否表示我没有正确转换日期列?
答案 0 :(得分:4)
IIUC,您可以在列与所说的idxmin
之间的区别上使用latest_date
:
latest_date = '05-2020'
print (dates.loc[(pd.to_datetime(dates['date'])
-pd.to_datetime(latest_date)).abs().idxmin(),
'date'])
'04-2020'
答案 1 :(得分:1)
注意:如果对索引进行排序,它会更安全,结果也更可靠
#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')