我有一個包含多個日期的日期列:
Date
2022-01-01 00:00:00
jan 20
january 19
如何以可擴展的方式(沒有字典)將它們轉換為適當的日期時間格式?
我試過:
df['Date_1'] = pd.to_datetime(df['Date'], errors='coerce').astype(str)
df['Date_2'] = pd.to_datetime(df['Date'], errors='coerce', ,yearfirst = False, format = '%B %y')).astype(str)
df['Date1'] = df['Date1'].str.replace('NaT','')
df['Date2'] = df['Date2'].str.replace('NaT','')
然后,我將兩列合并為:
df['Date3'] = df['Date1'] df['Date2']
但是,這不起作用,因為我需要創建另一種格式(對于非縮寫月份)。但是當添加上面的邏輯,然后將 %B 更改為 %b 時,它會重復一些月份(就像可能一樣,它是:縮寫和完整月份)。
我想得到最終結果:
2022-01-01
2020-01-01
2019-01-01
uj5u.com熱心網友回復:
沒有直接的方法可以一次處理所有格式。
你可以做的是使用連續的方法。在這里,我使用正則運算式組合了“1 月 19 日”和“1 月 20 日”。.fillna(<new_converter>)如果您將來發現更多格式,您可以使用附加。
(pd
.to_datetime(df['Date'], errors='coerce')
.fillna(pd.to_datetime(df['Date'].str.replace('([a-z]{3})[a-z] ', r'\1', regex=True),
errors='coerce', yearfirst=False, format='%b %y')
)
)
輸出:
0 2022-01-01
1 2020-01-01
2 2019-01-01
Name: Date, dtype: datetime64[ns]
uj5u.com熱心網友回復:
用于combine_first嘗試各種不同的日期格式:
date = pd.to_datetime(df["Date"], errors="coerce")
for format in ["%b %y", "%B %y"]:
date = date.combine_first(pd.to_datetime(df["Date"], format=format, errors="coerce"))
df["Date"] = date
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472586.html
