【问题标题】:Pandas Datetime column Filtering Issue when using variables使用变量时的 Pandas 日期时间列过滤问题
【发布时间】:2020-03-22 01:15:01
【问题描述】:

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

转换为日期时间
df['Date'] = pd.to_datetime(df['Date'])

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

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

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

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

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

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

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

【问题讨论】:

  • 该错误表明在被比较的两列中,一列的类型为字符串,而另一列的类型为日期时间。因此,其中一列中可能有一个条目将其转换为字符串。

标签: python pandas dataframe datetime


【解决方案1】:

我使用 Pandas 版本 0.25Python 版本 3.7.0

我检查了你的代码:

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

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

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

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

  1. 将“边框”值转换为日期时间

    d1 = pd.to_datetime('2019-06-01')
    d2 = pd.to_datetime('2019-06-30')
    df[df.Date.between(d1, d2)]
    
  2. between 的用法,两个参数都为 strings:

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

获得正确的结果。在您的安装中检查它们 就像现在和升级之后一样(如果你决定这样做的话)。

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 2020-07-10
    • 2012-09-30
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多