2017-12-02 149 views
1

我有一個數據框,其中的列看起來像一個日期,但實際上是一個對象(type 'O')。該列中的某些值的值爲9999-12-31 00:00:00.000。它們在某種意義上是一個指標,表明一行是「無限期」有效的。根據條件改變熊貓的日期值並轉換爲日期時間

pd.to_datetime()不符合這些值,並給出「日期超出範圍」錯誤。我試圖編寫一個函數將值轉換爲一個字符串,然後檢查第一個字符以查看它是否爲9,但這也不起作用。

只要你相信,我已經試過的東西,這是兩個功能我曾嘗試:

def change_to_datetime(df, colname): 
    for index, row in df.iterrows(): 
     string = str(row[12]) 
     if string[0] == '9': 
      row[12] = '2018-01-01 00:00:00.000' 
     row[12] = pd.to_datetime(row[12]) 
    return df 

和:

def change_to_datetime2(df, colname): 
    mask = str(df.colname)[0] == '9' 
    df.loc[mask, colname] = '2018-01-01 00:00:00.000' 
    df[colname] = pd.to_datetime(df[colname]) 
    return df 

我也曾在這裏閱讀其他類似的問題,但他們沒有幫助我。我是熊貓的新手。

回答

1

如果9999是唯一的問題,您可以使用errors='coerce'無效的輸入轉換爲NaT空值。然後,您可以用'2018-01-01 00:00:00.000'

使用此填補那些並將其分配給任何列你想

filler = pd.to_datetime('2018-01-01') 
pd.to_datetime(df[colname], errors='coerce').fillna(filler)