Pandas 读取格式 %D:%H:%M:%S python

Pandas read format %D:%H:%M:%S with python

目前我正在读取带有电影时间戳的数据帧 00(天):00(小时时钟在 24 到天):00(分钟):00(秒)

pandas 读取时间格式 HH:MM:SS 和 YYYY:MM:DD HH:MM:SS 很好。 虽然有没有办法让 pandas 读取持续时间,例如 DD:HH:MM:SS.

或者使用 timedelta 如何将 DD 放入数据框中的 HH,以便 pandas 可以使其成为“1 天 HH:MM:SS”,例如

数据样本

00:00:00:00
00:07:33:57 
02:07:02:13 
00:00:13:11 
00:00:10:11 
00:00:00:00 
00:06:20:06 
01:12:13:25 

最后一个样本的预期输出

36:13:25

谢谢

单独转换天数,添加到时间和最后调用自定义函数:

def f(x):
    ts = x.total_seconds()
    hours, remainder = divmod(ts, 3600)
    minutes, seconds = divmod(remainder, 60)
    return ('{}:{:02d}:{:02d}').format(int(hours), int(minutes), int(seconds)) 


d = pd.to_timedelta(df['col'].str[:2].astype(int), unit='d')
td = pd.to_timedelta(df['col'].str[3:])
df['col'] =  d.add(td).apply(f)
print (df)
        col
0   0:00:00
1   7:33:57
2  55:02:13
3   0:13:11
4   0:10:11
5   0:00:00
6   6:20:06
7  36:13:25

如果你想要 timedelta 对象,一个简单的方法是将第一个冒号替换为 days :

df['timedelta'] = pd.to_timedelta(df['col'].str.replace(':', 'days ', n=1))

输出:

           col       timedelta
0  00:00:00:00 0 days 00:00:00
1  00:07:33:57 0 days 07:33:57
2  02:07:02:13 2 days 07:02:13
3  00:00:13:11 0 days 00:13:11
4  00:00:10:11 0 days 00:10:11
5  00:00:00:00 0 days 00:00:00
6  00:06:20:06 0 days 06:20:06
7  01:12:13:25 1 days 12:13:25
>>> df.dtypes
col                   object
timedelta    timedelta64[ns]
dtype: object

从那里开始,将日期和时间组合为字符串也相对容易:

c = df['timedelta'].dt.components
df['str_format'] = ((c['hours']+c['days']*24).astype(str)
                    +df['col'].str.split('(?=:)', n=2).str[-1]).str.zfill(8)

输出:

           col       timedelta str_format
0  00:00:00:00 0 days 00:00:00   00:00:00
1  00:07:33:57 0 days 07:33:57   07:33:57
2  02:07:02:13 2 days 07:02:13   55:02:13
3  00:00:13:11 0 days 00:13:11   00:13:11
4  00:00:10:11 0 days 00:10:11   00:10:11
5  00:00:00:00 0 days 00:00:00   00:00:00
6  00:06:20:06 0 days 06:20:06   06:20:06
7  01:12:13:25 1 days 12:13:25   36:13:25