我有一个Pandas数据框,其中包含3列:“小时”,“分钟”和“秒”,我需要将它们串联起来。
我希望稍后在分析中使用一个日期,但是目前我正在创建一个名为time的临时列。我的问题是小时,分钟和秒有1或2位数字,当有2时,我想使用数字,但是如果有1 [1-9],那么我要写“ 01”或“ 02”或...或“ 09”。这是我的代码
dfdate['AgentDateTime'] =
(dfdate['DISPATCH_HOUR'] if (len(dfdate['DISPATCH_HOUR'])==2) else ("0"+dfdate['DISPATCH_HOUR']))
+ ":"
+ (dfdate['DISPATCH_MIN'] if (len(dfdate['DISPATCH_MIN'])==2) else ("0"+dfdate['DISPATCH_MIN']))
+ ":"
+ (dfdate['DISPATCH_SEC'] if (len(dfdate['DISPATCH_SEC'])==2) else ("0"+dfdate['DISPATCH_SEC']))
无论出于何种原因,都会返回10、010和11,分别返回011,依此类推。如何解决此问题,因为当我查询带有两位数数字的单行时,
len(dfdate['DISPATCH_MIN'])==2
返回True,表示上面的if语句应返回不带0前缀的行。
答案 0 :(得分:1)
没有必要。只需将您的列切成薄片,与agg一起加入,然后将结果传递到pd.to_timedelta
。
v = dfdate[['DISPATCH_HOUR', 'DISPATCH_MIN', 'DISPATCH_SEC']]
dfdate['AgentDateTime'] = pd.to_timedelta(
v.astype(str).agg(':'.join, axis=1), errors='coerce')