If else datetime python函数

If else datetime python函数,python,Python,在我的数据中有一个名为expiration date的列,其中一些事件有过期日期,而当我加载该列的日期时,有些事件没有过期日期,该列看起来像以下作为对象加载的: expiration_date 2017-06-14 2018-01-15 9999-12-31 然后,我将其转换为datetime,并通过强制错误将9999-12-31日期保留为NaT data.expiration_date = pd.to_datetime(data.expiration_date, errors = 'coer

在我的数据中有一个名为expiration date的列,其中一些事件有过期日期,而当我加载该列的日期时,有些事件没有过期日期,该列看起来像以下作为对象加载的:

expiration_date
2017-06-14
2018-01-15
9999-12-31
然后,我将其转换为datetime,并通过强制错误将9999-12-31日期保留为NaT

data.expiration_date = pd.to_datetime(data.expiration_date, errors = 'coerce')
然后我想创建一个函数,创建一个新的列二进制列,如果过期日期是NaT,那么它是1,否则它是0。我尝试了以下方法:

def status(data):
    if data[data.expiration_date.isnull()]:
       return 1
    else:
       return 0

data['event'] = data.apply(status, axis = 1)
但是我得到了下面的错误消息,我想这是试图在datetime格式的列上使用isnull。我还没有找到一个好方法来解决datetime中的空值问题

"'datetime.date' object has no attribute 'isnull'", 'occurred at index 0'

任何想法,我是python新手,任何帮助都会很好!谢谢

isnull
是一种
DataFrame
方法,因此不需要应用该方法

我想你想要的是:

data.expiration_date.isnull().astype(int)

用lambda检查数据的类型来尝试这个方法

示例数据帧

mydict1 = {'expiration_date' : ['2017-06-14','2018-01-15','9999-12-31']}
df=pd.DataFrame(mydict1)
df.expiration_date=pd.to_datetime(df.expiration_date, errors = 'coerce')
print(df)
输出

       expiration_date
    0   2017-06-14
    1   2018-01-15
    2   NaT
expiration_date event
0   2017-06-14  0
1   2018-01-15  0
2   NaT         1
expiration_date event
0   2017-06-14  0
1   2018-01-15  0
2   NaT         1
只保留日期部分

df.expiration_date.values.astype('M8[D]')
print(df)
在级数上应用函数

def status(data):

    if (type(data)!=datetime.date):
        return 1
    return 0

df['event']=df.expiration_date.dt.date.apply(status)
print(df)
输出

       expiration_date
    0   2017-06-14
    1   2018-01-15
    2   NaT
expiration_date event
0   2017-06-14  0
1   2018-01-15  0
2   NaT         1
expiration_date event
0   2017-06-14  0
1   2018-01-15  0
2   NaT         1
无lambda的较短解

df['event']=df['expiration_date'].isnull().astype('int')
输出

       expiration_date
    0   2017-06-14
    1   2018-01-15
    2   NaT
expiration_date event
0   2017-06-14  0
1   2018-01-15  0
2   NaT         1
expiration_date event
0   2017-06-14  0
1   2018-01-15  0
2   NaT         1
只是在玩上面的另一个类似的解决方案

df['event']=0
df.loc[df.expiration_date.isnull(),'event']=1

如果数据[data.expiration\u date.isnull()]
没有意义。如果data.expiration\u date为None,您可能需要类似于
的内容,如果data.expiration\u date为None,也可以将其写入
如果data.expiration\u date为None
。我尝试运行该代码,但无论是否存在有效的日期时间或是否为NaT,所有内容都被分配为0。这是完美的df['event']=df['expiration\u date'].isnull().astype('int')。非常感谢。