如何将Numpy NaT值转换为Pandas datetime值

2024-10-01 17:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将numpy.datetime64('NaT')值转换为Pandasdatetime值。我使用下面的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) 

用法示例:

^{pr2}$

当函数达到np.datetime64('NaT')值时,将显示以下错误:OSError: [Errno 22] Invalid argument.

如何将np.datetime64('NaT')值转换为Pythondatetime值?


编辑/更新:

我试图将np.datetime64('NaT')值转换为Pythondatetime值,因为研究表明这可以帮助我将DataFrame列中的值上载到MS Access表中。我该怎么做?


Tags: numpydatetimenpunixonenatsecondssecond
2条回答

似乎没有日期时间。日期时间模拟numpy.datetitme64('NaT')。 抓住错误,选择合适的东西。由于错误说明该值太大,请返回可能的最大日期时间。在

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

添加到Alexander's注释时,最好显式地处理空值。一种方法是按如下方式编辑函数:

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'))返回{}。而且,我的环境实际上不能复制您的错误(它返回nan而不显式地处理null)。所以考虑升级熊猫和/或纽比。在

相关问题 更多 >

    热门问题