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

Python中Timestamp、str与datetime64[ns]年月日期的最佳比较方案

最佳日期类型选择及解决方案

针对你的场景,推荐两种最靠谱的类型转换方案,按需选择:

1. 直接用字符串类型比较(最简单高效)

你的所有日期都是"YYYY-MM"的标准格式,只要确保df['Year_Month']的object类型元素都是无格式错误的字符串(比如没有多余空格、不是"2020/01"这类分隔符不一致的情况),直接用字符串比较是最省事的。

格式验证(可选但建议做)

先确认df['Year_Month']的格式统一:

# 检查是否所有元素都是标准的YYYY-MM格式
invalid_rows = df[~df['Year_Month'].str.match(r'^\d{4}-\d{2}$')]
if not invalid_rows.empty:
    print("存在格式错误的日期行:", invalid_rows)

如果没有格式错误,直接用你原来的查询语句即可,不需要额外转换:

df[(df['Year_Month'] == current_month_year) | (df['Year_Month'] == last_month_year)]

2. 转换为pandas Period类型(更适合后续日期操作)

如果之后还要做月份加减、排序、按月份聚合等操作,转成**月度周期(Period[M])**是更严谨的选择,它直接对应"年月"的概念,避免Timestamp带日的冗余信息。

转换步骤:

  1. 转换DataFrame列:
df['Year_Month'] = df['Year_Month'].astype('period[M]')
  1. 转换两个字符串变量:
import pandas as pd

last_month_year = pd.to_datetime(last_month_year).to_period('M')
current_month_year = pd.to_datetime(current_month_year).to_period('M')
  1. 执行查询:
df[(df['Year_Month'] == current_month_year) | (df['Year_Month'] == last_month_year)]

不推荐Timestamp的原因

Timestamp是带具体日期的类型(转"2020-01"会默认变成2020-01-01 00:00:00),虽然强行比较也可能得到结果,但它额外引入了"日"的信息,不符合你只需要比较"年月"的需求,反而可能因为隐式转换带来不必要的问题。

内容的提问来源于stack exchange,提问作者nilsinelabore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:30:42