我有一个3列的Pandas数据框:“小时”,“分钟”和“第二”,我需要将它们串联起来。

我希望稍后在分析中使用一个日期,但是暂时我正在创建一个名为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前缀的行。

最佳答案

没有必要。只需将您的列切成薄片,与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')

关于python - 通过串联列在Python中格式化时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51461365/

10-12 17:00