熊猫使用if语句将日期与日期时间索引进行比较

时间:2020-10-04 14:19:10

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

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

在此先感谢您的帮助或评论。

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'

1 个答案:

答案 0 :(得分:0)

如果我的问题正确,那么您只需要一个布尔掩码。在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]