在 python 中进行迭代时如何处理日期时间的 NaT 值?

Posted

技术标签:

【中文标题】在 python 中进行迭代时如何处理日期时间的 NaT 值?【英文标题】:How to handle NaT values for datetime when doing iterations in python? 【发布时间】:2016-05-17 04:10:48 【问题描述】:

我正在使用以下代码将日期时间值转换为整数。除了 NaT 值外,它工作得很好。如果我在迭代中执行此操作,我该如何处理 NaT 值,以免出现“NaTType 不支持 timetuple”之类的错误?

import time
from datetime import datetime
t=datetime.now()
t1=t.timetuple()
int(time.mktime(t1)/60/60/24)

这里是创建示例数据的代码以及到目前为止我尝试迭代的代码:

创建数据:

df = pd.DataFrame(data='date':['05/16/16',''], 'Indicator':[1,0])
df['date']=pd.to_datetime(df['date'])

数据:

   Indicator       date
0          1 2016-05-16
1          0        NaT

迭代代码:

def date2int(df):
    if df.date:
        t=df['date']
        t1=t.timetuple()
        return int(time.mktime(t1))
df['date2int']=df.apply(date2int,axis=1)

错误信息:

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 df['date2int']=df.apply(date2int,axis=1)

文件“/Users/Chen/anaconda/lib/python2.7/site-packages/pandas/core/frame.py”,第 4042 行,在应用中 return self._apply_standard(f, axis, reduce=reduce)

文件“/Users/Chen/anaconda/lib/python2.7/site-packages/pandas/core/frame.py”,第 4138 行,在 _apply_standard 结果[i] = func(v)

文件“”,第 4 行,在 date2int 中 t1=t.timetuple()

文件“pandas/tslib.pyx”,第 723 行,在 pandas.tslib._make_error_func.f (pandas/tslib.c:16109) 中

ValueError: ('NaTType 不支持 timetuple', u'发生在索引 1')

【问题讨论】:

.timetuple() 调用包装到 ValueError 的 try-catch 块中。 如果我能看到你的循环代码就更好了。 我添加了带循环的代码。 【参考方案1】:

解决方案 #1:

def date2int(df):
    if df.date:
        t=df['date']
        try:
            t1=t.timetuple()
            return int(time.mktime(t1))
        except ValueError:
            return None
df['date2int']=df.apply(date2int,axis=1)

解决方案 #2:

df=df.dropna()

【讨论】:

我使用了解决方案 #1,因为我仍然需要保留所有 NaT 值,而且效果非常好。

以上是关于在 python 中进行迭代时如何处理日期时间的 NaT 值?的主要内容,如果未能解决你的问题,请参考以下文章

在 log4j2 jdbcapender 中设置日期时如何处理 null?

使用python绘制箱线图时如何处理NaN值

在express中的每个数组元素中进行猫鼬查询时如何处理异步?

当元素为 data-testid 时如何处理弹出“接受所有 cookie” - 在 Python 中使用 Selenium

在Google Cloud中部署Python App时如何处理打开文件的路径?

通过JDBC处理数据库时如何处理夏令时?