【问题标题】:Selecting Data from Last Week in Python在 Python 中选择上周的数据
【发布时间】:2015-09-08 04:45:00
【问题描述】:

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

我的第一个问题是接收日期和时间的列不是熊猫中日期时间的格式。我的输入(第 15 列)如下所示:

recvd_dttm
1/1/2015 5:18:32 AM
1/1/2015 6:48:23 AM
1/1/2015 13:49:12 PM

从 pandas 库中的时间序列/日期功能,我正在研究基于以下示例中显示的“Week()”函数的代码:

In [87]: d
Out[87]: datetime.datetime(2008, 8, 18, 9, 0)

In [88]: d - Week()
Out[88]: Timestamp('2008-08-11 09:00:00')

我试过这样排序日期:

df =pd.read_csv('MYDATA.csv')
orderdate = datetime.datetime.strptime(df['recvd_dttm'], '%m/%d/%Y').strftime('%Y %m %d')

但是我得到了这个错误

TypeError: must be string, not Series

有没有人知道一个更简单的方法来做到这一点,或者如何解决这个错误?

编辑:日期不一定按顺序排列。并且有时数据库中会出现错误错误,例如某人输入错误的日期是 2015 年 9 月 3 日(将来)。我需要能够忽略这些。

【问题讨论】:

    标签: python datetime pandas format dataframe


    【解决方案1】:
    import datetime as dt
    
    # convert strings to datetimes
    df['recvd_dttm'] = pd.to_datetime(df['recvd_dttm'])
    
    # get first and last datetime for final week of data
    range_max = df['recvd_dttm'].max()
    range_min = range_max - dt.timedelta(days=7)
    
    # take slice with final week of data
    sliced_df = df[(df['recvd_dttm'] >= range_min) & 
                   (df['recvd_dttm'] <= range_max)]
    

    【讨论】:

    • 快速附加问题,我有一个未来的日期(我敢肯定是偶然写的),这与我的代码有关。如何忽略不在范围内的日期?
    • 您可以手动输入最大日期时间,而不是 .max()
    • 代码将每隔几分钟自动更新一次,因此手动不是一个真正的选择。
    • 啊,既然是在未来,你可以先选择所有不在未来的行——使用dt.datetime.now()——然后执行上述步骤。
    【解决方案2】:

    您可以通过列表理解来迭代要转换的日期

    orderdate = [datetime.datetime.strptime(ttm, '%m/%d/%Y').strftime('%Y %m %d') for ttm in list(df['recvd_dttm'])]
    

    【讨论】:

    • 啊哈哈!我认为这是有效的。唯一的问题是如何处理时间变量。我得到“ValueError:未转换的数据仍然存在:5:18”我并不关心时间,我更关心读取最后一周的数据。
    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多