我的 Dataframe 中有一列包含 datetime.time() 值。例子 :
--> df.loc[0,'tat']
output: datetime.time(0, 21, 4)
我想用這個列寫多個 if 條件。例子:
--> if df.loc[0,'tat'] < 2:
df.loc[0,'SLA'] = 'less than 2 hour SLA'
else:
df.loc[0,'SLA'] = 'greater than 2 hour SLA'
--> if df.loc[0,'tat'] < 4 and df.loc[0,'tat'] > 2:
df.loc[0,'SLA'] = '2-4 hour SLA'
else:
df.loc[0,'SLA'] = 'greater than 4 hour SLA'
當我比較 df.loc[r,'tat']< 2 它給出了一個TypeError: '<' not supported between instances of 'datetime.time' and 'int'
然后我嘗試創建時間增量。
timedelta_2 = timedelta(hours=2)
df.loc[r,'tat']< timedelta_2
它仍然給我一個TypeError: '<' not supported between instances of 'datetime.time' and 'datetime.timedelta'
我還應該怎么比較?!
uj5u.com熱心網友回復:
您需要將小時數與標量進行比較,新輔助列的解決方案hour具有cut:
hours = pd.to_datetime(df['tat'].astype(str)).dt.hour
hours = df['tat'].apply(lambda x: x.hour)
df['SLA'] = pd.cut(hours, bins=[0,2,3,24],
labels=['less than 2 hour SLA','2-4 hour SLA','greater than 4 hour SLA'])
或者您可以hour從datetime.time物件中提取:
if df.loc[0,'tat'].hour < 2:
df.loc[0,'SLA'] = 'less than 2 hour SLA'
elif (df.loc[0,'tat'].hour < 4) and (df.loc[0,'tat'].hour > 2):
df.loc[0,'SLA'] = '2-4 hour SLA'
else:
df.loc[0,'SLA'] = 'greater than 4 hour SLA'
新列的解決方案SLA:
def func(x):
if x.hour < 2:
return 'less than 2 hour SLA'
elif (x.hour < 4) and (x.hour > 2):
return '2-4 hour SLA'
else:
return 'greater than 4 hour SLA'
df['SLA'] = df['tat'].apply(func)
uj5u.com熱心網友回復:
您不能將 dattime.time 實體與整數進行比較
您正在做的是將蘋果與橘子進行比較
我建議將 int 轉換為時間實體
import datetime.datetime as dt
if df.loc[0,'tat'] < dt.time(hours=2,minutes=0,seconds=0):
df.loc[0,'SLA'] = 'less than 2 hour SLA'
else:
df.loc[0,'SLA'] = 'greater than 2 hour SLA'
if df.loc[0,'tat'] < dt.time(4,0,0) and df.loc[0,'tat'] > dt.time(hours=2,minutes=0,seconds=0):
df.loc[0,'SLA'] = '2-4 hour SLA'
else:
df.loc[0,'SLA'] = 'greater than 4 hour SLA'
我還建議您確保兩列('tat','SLA')都是 datetime.time 實體
uj5u.com熱心網友回復:
Datetime.time 物件表示獨立于日期的時間。例如
datetime.time(0, 21, 4)
轉換為 00:21:04 AM
來源:https ://docs.python.org/3/library/datetime.html#date-objects
因此,您可能需要將“tat”時間與另一個 datetime.time 物件進行比較,例如
if df.loc[0,'tat']-other_datetime_time_object < timedelta(hours=2):
或者,如果“tat”實際上代表某物的持續時間,則它應該是 timedelta 物件。
編輯:如果你不能改變物件型別,最骯臟的黑客就是將它與 00:00:00 進行比較,例如
if df.loc[0,'tat']-datetime.time(0,0,0) < timedelta(hours=2):
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/537893.html
標籤:Python熊猫约会时间
