按字符串日期过滤 pandas 中的数据

Filter data in pandas by a string date

我有一个如下所示的 DataFrame:

Date Parameter
2010-01-02 some value
2010-01-03 some value
2010-01-04 some value
... ...
2011-01-02 some value
2011-01-03 some value
2011-01-04 some value
... ...
2012-01-02 some value
2012-01-03 some value
2012-01-04 some value

日期列 (%Y-%m-%d) 是 Dtype datetime64[ns] 并且参数列是 Dtype float64

我还有一个字符串变量'limit_date'

我想获得一个 DF,其中只有 limit_date.

之前的日期对应的行

我已经使用了这两种不同的方法并且它们有效: df[df['Date']<'2011-01-01'] df.query('Date<20110101')

在这两种情况下我得到的结果都是这样的:

Date Parameter
2010-01-02 some value
2010-01-03 some value
2010-01-04 some value
... ...
2010-12-30 some value
2010-12-31 some value

不过。如果我想用字符串limit_date 我把运行改成问题:

有人知道如何处理这个问题吗?

我需要在我的代码中使用一个字符串变量 bc 这个 limit_date 将在整个代码中改变。

DataFrame.query 希望您引用列名; df.query('Date < limit_date') 正在尝试查询 'Date' 列中的值小于 'limit_date' 列中的值的行。 (它怎么知道 'Date' 是一个列,而 limit_date 是一个变量,因为您以类似的方式引用它们?)

要区分列和环境变量,您需要在环境变量前添加 @

df.query('Date < @limit_date')
#        Date
#0 2010-01-01
#1 2010-01-02
#2 2010-01-03
#3 2010-01-04

您的第一次尝试:df[df['Date'] < limit_date] 在技术上是正确的并且应该有效。很可能,您将先前的过滤器应用于 DataFrame 并覆盖了结果,因此现在当您应用此过滤器时,它会产生一个空的 DataFrame。刷新内核,从头开始。


示例数据

import pandas as pd

df = pd.DataFrame({'Date': pd.date_range('2010-01-01', freq='D', periods=20)})
limit_date = '2010-01-05'