在 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?
在express中的每个数组元素中进行猫鼬查询时如何处理异步?
当元素为 data-testid 时如何处理弹出“接受所有 cookie” - 在 Python 中使用 Selenium