通过串联列在Python中格式化时间

时间:2018-07-22 01:35:21

标签: python pandas

我有一个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前缀的行。

1 个答案:

答案 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')