我有以下代碼:
np.where((final_df_SDC['Start Time']>= final_df_SDC['Repayment_Time']) & (final_df_SDC['End Time'] <= final_df_SDC['Repayment_Time']),"OCC","-")
這給了我錯誤: TypeError: '>=' not supported between instances of 'datetime.time' and 'str'
但是,當我檢查 dtypes 時
final_df_SDC['Start Time'].dtype
final_df_SDC['Repayment_Time'].dtype
final_df_SDC['End Time'].dtype
我得到: dtype('O')
那怎么不比較呢?我嘗試轉換為pd.datetime(final_df_SDC['Start Time'])然后它說TypeError: <class 'datetime.time'> is not convertible to datetime
我現在非常困惑。我如何讓所有這些時間值相互比較?
示例值:08:55:18所有三列均采用此格式。
轉換為 astype(str) 后的樣本值
Start Time End Time Repayment_Time
5415 2021-12-01 15:12:24 2021-12-01 15:12:48 2021-12-01 17:41:20
5482 2021-12-01 15:17:05 2021-12-01 15:18:32 2021-12-01 16:33:49
5539 2021-12-01 15:19:40 2021-12-01 15:19:42 2021-12-01 20:02:20
6011 2021-12-01 15:46:18 2021-12-01 15:47:50 2021-12-01 15:51:01
6128 2021-12-01 15:54:20 2021-12-01 15:57:28 2021-12-01 16:00:51
6177 2021-12-01 15:55:44 2021-12-01 15:56:07 2021-12-01 20:00:34
6262 2021-12-01 15:58:28 2021-12-01 15:58:39 2021-12-01 12:11:2
uj5u.com熱心網友回復:
對于所有列使用to_datetimewith 轉換為字串:
s = pd.to_datetime(final_df_SDC['Start Time'].astype(str))
e = pd.to_datetime(final_df_SDC['End Time'].astype(str))
r = pd.to_datetime(final_df_SDC['Repayment_TimeTime'].astype(str))
或to_timedelta:
s = pd.to_timedelta(final_df_SDC['Start Time'].astype(str))
e = pd.to_timedelta(final_df_SDC['End Time'].astype(str))
r = pd.to_timedelta(final_df_SDC['Repayment_TimeTime'].astype(str))
然后更改<=為>=:
np.where((s <= r) & (e >= r),"OCC","-")
或使用Series.between:
np.where(r.between(s, e),"OCC","-")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370506.html
上一篇:在rust中使用chrono決議日期時間時如何顯示毫秒?
下一篇:無法將字串物件轉換為時間
