【问题标题】:Pandas comparing a date to datetime index using if statementPandas 使用 if 语句比较日期和日期时间索引
【发布时间】:2021-01-19 13:27:20
【问题描述】:

我正在使用 for 循环将变量/日期与每个日期时间段进行比较。下面的代码为每个时期产生“假”,这是不正确的。我列表中的前五个日期都是 2006 年,后五个日期都是 2011 年。data['date'] 的 dtype 是 datetime64,我在代码中将变量转换为 datetime。

提前感谢任何帮助或 cmets。

import numpy as np
import pandas as pd
from datetime import datetime
from dateutil.parser import parse

data = pd.read_csv("test_data_3.csv").fillna(0)
data['date'] = pd.to_datetime(data['date'])
data.set_index(data['date'], inplace=True)

lockout_pd_2_begin = '2009-06-01'
lockout_pd_2_begin = datetime.strptime(lockout_pd_2_begin,'%Y-%m-%d')

for row in data:
    if (lockout_pd_2_begin >= data['date']).all():
        data['lockout_test_result'] = 'True'
    else:
        data['lockout_test_result'] = 'False'

【问题讨论】:

    标签: python pandas datetime for-loop conditional-statements


    【解决方案1】:

    如果我的问题是正确的,您只需要一个布尔掩码。在pandas 中,您可以使用类似的条件推导出

    # trying to reproduce the data:
    data = pd.DataFrame({'date': pd.date_range("2006-01-01", "2011-12-31", freq='M')})
    
    # get a boolean Series reflecting the condition:
    data['lockout_test_result'] = data['date'] >= pd.Timestamp('2009-06-01')
    
    # data
    #          date  lockout_test_result
    # 0  2006-01-31                False
    # 1  2006-02-28                False
    # 2  2006-03-31                False
    # 3  2006-04-30                False
    # 4  2006-05-31                False
    # ..        ...                  ...
    # 67 2011-08-31                 True
    # 68 2011-09-30                 True
    # 69 2011-10-31                 True
    # 70 2011-11-30                 True
    # 71 2011-12-31                 True
    
    # [72 rows x 2 columns]
    

    【讨论】:

    • @user11144539:很高兴我能帮上忙!如果您想知道为什么您的版本不起作用,那是因为对于 data['date'] ("row") 的每个元素,您先与整个列 ("data['date']") 进行比较,然后再与 .all()永远不会返回真。如果您与row 进行比较,它会起作用。
    • 感谢您指出这一点。我正在将我的建模从 excel 转移到 python,并使用旧的结构化信用交易进行练习。再次感谢您的帮助。
    猜你喜欢
    • 2019-08-06
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多