我有資料框
df = pd.DataFrame(
{
'ID': ['AB01', 'AB02', 'AB03', 'AB04','AB05', 'AB06'],
'l_date': ["1/4/2021","1/4/2021",'1/5/2021','1/5/2021','1/8/2021', np.nan],
'l_time': ["17:05",
"6:00","13:43:10","00:00",np.nan,np.nan]
}
)
我想創建一個新列,將l_date和l_time合并到一個日期時間列中,l_datetime.
我的代碼是這樣的
cols = ['l_date','l_time']
df['d_datetime'] = df[cols].astype(str).agg(' '.join, axis=1)
df['d_datetime'] = df['d_datetime'].replace({'nan':''}, regex=True)
df['d_datetime'] = pd.to_datetime(df['d_datetime'], errors="coerce").dt.strftime("%d/%m/%Y %H:%M")
現在,這會為AB05as生成時間00:00并創建日期時間。但是對于列中沒有時間的那些l_time,我希望d_datetime只有日期。我怎樣才能做到這一點?
最初我試過
df['d_datetime'] = df['d_datetime'].replace({' 00:00':''}, regex=True)
但這也消除了時間AB04,我不想要那樣。我怎樣才能達到如下所示的最終結果?

更新
從以下結果:

我想檢查是否l_time是NaN,如果是,我想申請replace({'00:00':''})該行。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
用:
df['d_datetime'] = (pd.to_datetime(df['l_date']).dt.strftime("%d/%m/%Y") ' ' df['l_time'].replace(np.nan, '').str[0:5]).str.strip()
OUTPUT:
ID l_date l_time d_datetime
0 AB01 1/4/2021 17:05 04/01/2021 17:05
1 AB02 1/4/2021 6:00 04/01/2021 6:00
2 AB03 1/5/2021 13:43:10 05/01/2021 13:43
3 AB04 1/5/2021 00:00 05/01/2021 00:00
4 AB05 1/8/2021 NaN 08/01/2021
5 AB06 NaN NaN NaN
uj5u.com熱心網友回復:
這是解決方案
將熊貓匯入為 pd 將 numpy 匯入為 np
df = pd.DataFrame(
{
'ID': ['AB01', 'AB02', 'AB03', 'AB04','AB05', 'AB06'],
'l_date': ["1/4/2021","1/4/2021",'1/5/2021','1/5/2021','1/8/2021', np.nan],
'l_time': ["17:05",
"6:00","13:43:10","00:00",np.nan,np.nan]
}
)
df.l_time = df.l_time.fillna('')
df['d_datetime']= df['l_date'].astype(str) " " df['l_time'].astype(str)
print(df)
uj5u.com熱心網友回復:
df.loc[df["l_time"].isnull(), "d_datetime"] = df["d_datetime"].replace(
{"00:00": ""}, regex=True
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/338809.html
