Pandas如何选取与指定日期最接近的行及报错解决
解决Pandas中获取最接近指定日期行的问题
嘿,我来帮你搞定这个问题!咱们一步步来拆解分析:
错误原因分析
你遇到的 AttributeError: type object 'datetime.datetime' has no attribute 'datetime' 并不是日期列转换的问题,而是datetime对象的创建写法有误。这通常是因为导入方式和调用方式不匹配:
- 如果你用
import datetime导入模块,创建对象应该写datetime.datetime(...); - 但如果是用
from datetime import datetime直接导入类,就只能写datetime(...),重复写datetime.datetime就会触发这个错误。
另外,你直接把字符串格式的latest_date传入datetime.datetime()也不对,得先把字符串转成datetime对象才行。
确认日期列转换是否正确
先验证下你的date列转换是否成功:
print(dates['date'].dtype)
如果输出是 datetime64[ns],说明转换完全没问题,不用纠结这部分。
两种实现需求的正确方法
方法1:修正你原有的代码逻辑
先把字符串格式的latest_date转成datetime对象,再用get_loc的nearest方法:
# 先确保导入正确,二选一即可 from datetime import datetime # 或者 import datetime # 把'05-2020'转成datetime对象 latest_date_dt = datetime.strptime(latest_date, '%m-%Y') # 如果用import datetime的话,就写:latest_date_dt = datetime.datetime.strptime(latest_date, '%m-%Y') # 获取最接近的行 closest_row = dates.iloc[dates['date'].index.get_loc(latest_date_dt, method='nearest')]
方法2:计算日期差值(更直观易读)
这种方法通过计算每个日期与目标日期的差值绝对值,取最小的那一行,逻辑更清晰,也不容易出错:
from datetime import datetime # 转换目标日期为datetime对象 latest_date_dt = datetime.strptime(latest_date, '%m-%Y') # 计算每个日期与目标日期的差值绝对值 dates['date_diff'] = abs(dates['date'] - latest_date_dt) # 选取差值最小的行 closest_row = dates.loc[dates['date_diff'].idxmin()] # 可选:删除临时创建的差值列 dates.drop('date_diff', axis=1, inplace=True)
两种方法都能帮你得到预期的04-2020对应的行。
内容的提问来源于stack exchange,提问作者user47467
相关产品推荐
相关产品推荐

