将字符串转换为datetime,同时跳过空值

时间:2017-09-11 14:08:18

标签: python datetime

我正在尝试转换包含表示日期的字符串的字段。我开始使用以下代码,首先确保值是一个字符串,然后将其转换为字符串.......所有你可能想到的好!? (字符串格式为yyyymmdd

def dateconvert(Start_date):
    Date_String = str(Start_date)
    dateconv = dt.datetime.strptime(Date_String, '%Y%m%d').strftime('%d/%m/%Y')
    return  dateconv

df['Newdates'] = df['Start_Date'].apply(dateconvert)

然而,这给了我一个错误,说明了以下内容;

ValueError: unconverted data remains: .0

我假设这可能是因为我所加入的值是浮点数所以我添加了以下内容;

def dateconvert(Start_date):
    Start_date = int(Start_date)  
    Date_String = str(Start_date)
    dateconv = dt.datetime.strptime(Date_String, '%Y%m%d').strftime('%d/%m/%Y')
    return  dateconv

df['Newdates'] = df['Start_Date'].apply(dateconvert)

然而,这给了我

ValueError: cannot convert float NaN to integer

由于此特定字段中存在Null个值。

因此,我尝试了以下内容,但仍然遇到与以前相同的错误!

def dateconvert(Start_date):
    if Start_date is not None:   
        Start_date = int(Start_date)  
        Date_String = str(Start_date)
        dateconv = dt.datetime.strptime(Date_String, '%Y%m%d').strftime('%d/%m/%Y')
        return  dateconv

df['Newdates'] = df['Start_Date'].apply(dateconvert)

我唯一想做的就是将此字符串转换为日期,跳过空值。

感谢。

1 个答案:

答案 0 :(得分:1)

可以使用try / catch。

def dateconvert(Start_date):

    try:

        Start_date = int(Start_date)  
        Date_String = str(Start_date)
        dateconv = dt.datetime.strptime(Date_String, '%Y%m%d').strftime('%d/%m/%Y')
        return  dateconv
    except ValueError:
        return Start_date #or '' or whatever you want to return for NULL