【问题标题】:pandas dropping rows based on datetime condition熊猫根据日期时间条件删除行
【发布时间】:2019-10-16 13:47:11
【问题描述】:

我正在根据日期时间条件删除行,我让它使用以下行

df.drop(df[df.index.date == datetime(2017,9,14).date()].index, inplace=True)

但是,当我实际运行代码时,我没有传递 datetime(2017,9,14).date() 进行比较,我传递的是 datetime.date(2017,9,14) 。所以代码看起来像这样......

df.drop(df[df.index.date == datetime.date(2017,9,14)].index, inplace=True)

但这显然会引发错误:

“描述符 'date' 需要一个 'datetime.datetime' 对象,但收到一个 'int'”

解决此问题以比较日期的最佳方法是什么。

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    您可以简化代码 - 如果不是 datetime.date(2017,9,14),则选择所有行 - 因此它会删除带有 datetime.date(2017,9,14) 的行:

    rng = pd.date_range('2017-09-13', periods=10, freq='10H')
    df = pd.DataFrame({'a': range(10)}, index=rng)  
    print (df)
                         a
    2017-09-13 00:00:00  0
    2017-09-13 10:00:00  1
    2017-09-13 20:00:00  2
    2017-09-14 06:00:00  3
    2017-09-14 16:00:00  4
    2017-09-15 02:00:00  5
    2017-09-15 12:00:00  6
    2017-09-15 22:00:00  7
    2017-09-16 08:00:00  8
    2017-09-16 18:00:00  9
    
    import datetime
    df1 = df[df.index.date != datetime.date(2017,9,14)]
    print (df1)
                         a
    2017-09-13 00:00:00  0
    2017-09-13 10:00:00  1
    2017-09-13 20:00:00  2
    2017-09-15 02:00:00  5
    2017-09-15 12:00:00  6
    2017-09-15 22:00:00  7
    2017-09-16 08:00:00  8
    2017-09-16 18:00:00  9
    

    【讨论】:

    • 抛出相同的错误:描述符“日期”需要一个“日期时间.日期时间”对象,但接收到一个“整数”。深入研究时,df.index.date 是一个 NP 数组,而 datetime.date 是一个对象。我认为这是问题所在?
    • @blonc - print (df.index.dtype) 是什么?
    • 这是一个datetime64[ns]
    • 欣赏其他问题的链接。感谢帮助,问题解决了。
    【解决方案2】:

    该错误是datetime.date(2017,9,14)抛出的,与Pandas无关。

    试试:

    from datetime import datetime
    datetime.date(2017,9,14)
    

    投掷:

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-2-8658ce936e92> in <module>
    ----> 1 datetime.date(2017,9,14)
    
    TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int'
    

    但是:

    import datetime
    datetime.date(2017,9,14)
    

    有效,它也适用于您的代码。

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 1970-01-01
      • 2016-12-25
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2019-08-21
      • 2021-03-19
      相关资源
      最近更新 更多