2017-09-11 6 views
0

日付を表す文字列を含むフィールドを変換しようとしています。私は最初に値が文字列であることを保証する次のコードを使い始めると、これを文字列に変換します。 (文字列の形式はyyyymmddである)NULLをスキップしている間に文字列をdatetimeに変換します

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) 

しかし、このことは、これによって特定の分野でNull値があるという事実のために私に

ValueError: cannot convert float NaN to integer 

を与えます。

私は次のように試しましたが、以前と同じエラーが表示されます。

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) 

私がやりたいことは、この文字列をNULLにスキップして日付に変換することだけです。

ありがとうございました。

答えて

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 
+0

これは美しいです。ありがとう! – Taylrl

関連する問題