You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:37:50