簡體   English   中英

如何將 pandas dataframe 列中的兩種不同日期格式轉換為相同格式?

[英]How to convert two different date formats from a pandas dataframe column into same format?

我在 pandas 列中有兩種不同的日期格式,例如 - DD-MM-YYYYMM/DD/YYYY ,我想將它們轉換為相同的格式。

我嘗試使用代碼 -

data['SALE DATE'] = pd.to_datetime(data['SALE DATE']).dt.strftime('%m/%d/%Y')

但這會將日期轉換為DD/MM/YYYYMM/DD/YYYY轉換為 output - data['SALE DATE']

在此處輸入圖像描述

我想要一個 python 解決方案來克服這個問題。 任何線索都會非常有幫助。

最直觀的解決方案是編寫自定義轉換 function,類似於:

def myDateConv(tt):
    sep = tt[2]
    if sep == '-':
        return pd.to_datetime(tt, format='%d-%m-%Y')
    elif sep == '/':
        return pd.to_datetime(tt, format='%m/%d/%Y')
    else:
        return tt

然后將其作為相關列的轉換器傳遞:

df = pd.read_csv('Input.csv', converters={'Date': myDateConv})

我准備了一個 CSV 文件,它使用read_csv讀取,沒有任何自定義轉換器,給出了原始內容和object類型的兩列:

         Date Input format
0  03-05-2020   DD-MM-YYYY
1  05/07/2020   MM/DD/YYYY

但是用上面的轉換器讀取相同的文件給出了:

        Date Input format
0 2020-05-03   DD-MM-YYYY
1 2020-05-07   MM/DD/YYYY

使用datetime64[ns]類型的Date列和從 5 月開始的兩個日期,正如預期的那樣。

或者,如果您有來自其他來源的 DataFrame 並且想要轉換此列,請運行:

df.Date = df.Date.apply(myDateConv)

如果您使用的是 pandas 版本 1.xx,您可以使用以下解決方案:

pd.to_datetime(["11-08-2018", "05-03-2016", "08/30/2017", "09/21/2018"], infer_datetime_format=True, dayfirst=True).strftime("%m/%d/%Y")

這給出了以下結果:

Index(['08/11/2018', '03/05/2016', '08/30/2017', '09/21/2018'], dtype='object')

...這里的重要論點是dayfirst=True

有關更多信息,請參閱pd.to_datetime文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM