【问题标题】:Ignoring future dates in python忽略python中的未来日期
【发布时间】:2015-06-22 20:34:54
【问题描述】:

我有一个大型数据库,我希望只阅读上周的 Python 代码。

但是,有人在数据库中打错了字,所以未来的某个日期会让所有事情都失败。

输入:

recvd_dttm
6/5/2015 18:28:50 PM
6/5/2015 14:25:43 PM
9/10/2015 21:45:12 PM
6/5/2015 14:30:43 PM
6/5/2015 14:32:33 PM
6/5/2015 14:33:45 PM

到目前为止的代码:

import datetime as datetime

#Create a dataframe with the data we are interested in
df1 =pd.read_csv('MYDATA.csv')

#This section selects the last week of data
# convert strings to datetimes
df1['recvd_dttm'] = pd.to_datetime(df1['recvd_dttm'])


# get first and last datetime for final week of data   
range_max = df1['recvd_dttm'].max()
range_min = range_max - datetime.timedelta(days=7)

# take slice with final week of data
df2 = df1[(df1['recvd_dttm'] >= range_min) & 
               (df1['recvd_dttm'] <= range_max)]

我想忽略未来的所有日期。我尝试过尝试:除了:IndexError 方法,但这不起作用,因为 IndexError 标志只是在代码的后面才抛出。

我尝试了一个 if 循环

if df1['recvd_dttm'].max() > datetime.datetime.now():

但是这些值是不可比较的,而且我不知道如何选择日期的倒数第二个值,因为 max()-1 显然不起作用。有没有人有任何想法?提前致谢!

【问题讨论】:

    标签: python datetime pandas dataframe


    【解决方案1】:

    你可以使用

    mask = df1['recvd_dttm'] <= datetime.datetime.now()
    df1 = df1.loc[mask]
    

    只选择recvd_dttm 小于当前日期时间的那些行。

    【讨论】:

      【解决方案2】:

      我相信您的问题是 to_datetime 没有按照您期望的方式工作。您需要告诉它预期的具体日期格式。

      import datetime as datetime
      import pandas as pd
      
      # prepare the dataframe
      dates = ['6/5/2015 18:28:50 PM', '6/5/2015 14:25:43 PM', '9/10/2015 21:45:12 PM', '6/5/2015 14:30:43 PM', '6/5/2015 14:32:33 PM', '6/5/2015 14:33:45 PM']
      df1 = pd.DataFrame({"recvd_dttm": dates})
      
      # properly convert dates
      df1['recvd_dttm'] = pd.to_datetime(df1['recvd_dttm'], format='%m/%d/%Y %H:%M:%S %p')
      
      # drop rows with dates in the future
      df1 = df1[df1['recvd_dttm'] < datetime.datetime.now()]
      

      【讨论】:

        猜你喜欢
        • 2013-01-12
        • 1970-01-01
        • 2020-10-09
        • 2017-02-15
        • 2020-04-26
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        • 2017-12-07
        相关资源
        最近更新 更多