首页 > 解决方案 > 使用变量时的 Pandas 日期时间列过滤问题

问题描述

我正在尝试根据我的数据框列之一中的日期过滤熊猫列。因此,例如,我有一列名为“日期”,已使用转换为日期时间

df['Date'] = pd.to_datetime(df['Date'])

例如,以 2019-06-01 格式放置它。现在我可以在列上执行过滤器,所以如果我只想在 6 月获得日期,我可以这样做

df[(df['Date'] >= '2019-06-01') & (df['Date'] <= '2019-06-30')]

这很好用,将日期时间与字符串进行比较,我假设熊猫会自动将其转换为日期时间以执行比较。

但是,一旦我将比较字符串分配给变量,这就会停止工作,所以如果我这样做

start = '2019-06-01'
end = '2019-06-30'
df[(df['Date'] >= start) & (df['Date'] <= end)]

我收到一个错误:TypeError: Invalid comparison between dtype=datetime64[ns] and str

关于为什么会发生这种情况的任何想法?

标签: pythonpandasdataframedatetime

解决方案


我使用Pandas 0.25版和Python 3.7.0版。

我检查了你的代码:

start = '2019-06-01'
end = '2019-06-30'
df[(df['Date'] >= start) & (df['Date'] <= end)]

得到正确的结果(没有错误)。

如果您使用一些旧版本的PythonPandas,请考虑升级它们。

我还检查了其他代码变体:

  1. 将“边界”值转换为datetime

    d1 = pd.to_datetime('2019-06-01')
    d2 = pd.to_datetime('2019-06-30')
    df[df.Date.between(d1, d2)]
    
  2. 将两个参数都用作字符串s的between的用法:

    df[df.Date.between('2019-06-01', '2019-06-30')]
    

也得到了正确的结果。在您的安装上检查它们现在和升级后(如果您决定这样做)。


推荐阅读