我需要将numpy.datetime64('NaT')
值转换为Pandas datetime
值。我在下面使用了Gord Thompson的解决方案来转换numpy.datetime64
值。
def dt64_to_datetime(dt64):
unix_epoch = np.datetime64(0, 's')
one_second = np.timedelta64(1, 's')
seconds_since_epoch = (dt64 - unix_epoch) / one_second
return datetime.utcfromtimestamp(seconds_since_epoch)
使用示例:
for value in df[col].values: ##Convert each np.datetime64 value in DF column to Pandas datetime
dt = dt64_to_datetime(value)
当函数达到np.datetime64('NaT')
值时,会显示以下错误:OSError: [Errno 22] Invalid argument.
如何将 np.datetime64('NaT')
值转换为Python datetime
值?
<小时/> 编辑/更新:
我正在尝试将np.datetime64('NaT')
值转换为Python datetime
值,因为研究表明这可以帮助我将DataFrame列中的值上传到MS Access表中。 我该怎么做?
答案 0 :(得分:0)
添加到Alexander's评论,最好显式处理空值。一种方法是像这样编辑你的函数:
$this->load->helper('url');
if(!isset($this->router->routes[uri_string()])){
show_404(); // Or whatever you want ...
}
在我的环境import pandas as pd
def dt64_to_datetime(dt64):
unix_epoch = np.datetime64(0, 's')
one_second = np.timedelta64(1, 's')
if pd.isnull(dt64):
return pd.NaT
else:
seconds_since_epoch = (dt64 - unix_epoch) / one_second
return datetime.utcfromtimestamp(seconds_since_epoch)
上返回pd.isnull(numpy.datetime64('NaT'))
。此外,我的环境实际上无法复制您的错误(它返回True
而不显式处理空值)。所以考虑升级熊猫和/或numpy。
答案 1 :(得分:0)
numpy.datetitme64('NaT')似乎没有datetime.datetime模拟。 抓住错误,只需选择合适的东西。由于错误表示该值太大,因此请返回最大日期时间。
def dt64_to_datetime(dt64):
unix_epoch = np.datetime64(0, 's')
one_second = np.timedelta64(1, 's')
seconds_since_epoch = (dt64 - unix_epoch) / one_second
#print(seconds_since_epoch)
try:
v = datetime.datetime.utcfromtimestamp(seconds_since_epoch)
except OSError as e:
#print(e)
v = datetime.datetime.max
return v