首页 > 解决方案 > 如何将包含 float 和 nan 值的 Dataframe 转换为 datetime python?

问题描述

我有一个数据框浮点列:

data = {'mydate': [23131.0,23131.0,np.nan,22677.0,22554.0,np.nan,23131.0]}

df = pd.DataFrame(data,columns=['mydate'])

         mydate 
0        23131.0              
1        23131.0              
2        NaN              
3        22677.0              
4        22554.0              
5        NaN              
6        23131.0              

它包含空值。我正在尝试使用以下代码将其转换为 datetime python

def dayym(unit):
    dates = {date:((epoch + datetime.timedelta(days=date))) for date in unit.unique()}
    return unit.map(dates)

df.loc[:,'mydate']= dayym(df['mydate'])

出现以下错误:

    dates = {date:((epoch + datetime.timedelta(days=date))) for date in unit.unique()}
  File "central_read.py", line 18, in <dictcomp>
    dates = {date:((epoch + datetime.timedelta(days=date))) for date in unit.unique()}
ValueError: cannot convert float NaN to integer

有任何想法吗。在这一点上,我已经脱离了他们。

标签: pythonpandasdatetime

解决方案


要将浮点数转换为日期时间并忽略 np.nan 值,您可以使用pd.to_datetime with errors='coerce'

import pandas as pd
import numpy as np
data = {'mydate': [23131.0,23131.0,np.nan,22677.0,22554.0,np.nan,23131.0]}
df = pd.DataFrame(data)
df['mydate'] = pd.to_datetime(df['mydate'], errors='coerce')
print (df)

这会给你:

                         mydate
0 1970-01-01 00:00:00.000023131
1 1970-01-01 00:00:00.000023131
2                           NaT
3 1970-01-01 00:00:00.000022677
4 1970-01-01 00:00:00.000022554
5                           NaT
6 1970-01-01 00:00:00.000023131

推荐阅读