首页 > 解决方案 > 从 pandas 中的字符串列解析 MM:SS

问题描述

我有一列将分钟和秒表示为 20:00 或 19:58。

import pandas as pd
d = {'clock': ['19:58', '20:00']}
df = pd.DataFrame(data=d)

我想将其真正表达为熊猫列中的一个对象,即分钟和秒。

我尝试使用pd.to_datetime(df.clock, format="%M:%S"),并且没有错误,但是20:00(二十分钟,零秒)的时间解析为1900-01-01 00:20:00.

我在如何只保留结果中的分钟和秒方面空白,以便我可以查看记录之间经过的时间(以秒为单位)。

诀窍?

我正在查看体育数据,游戏中有 3 个时段,每个时段从 20 分钟开始倒数,所以我不能只是附加游戏日期并继续前进,因为每个时间序列可以出现 3 次(或更多的)。

标签: pythonpandastime

解决方案


有一个pd.to_timedelta功能可以试试。但它似乎期待hh:mm:ss格式的东西,所以我不得不增加输入:

>>> import pandas as pd

>>> times = ['20:00', '19:58', '00:05']
>>> pd.to_timedelta(['00:'+i for i in times]) # manually convert to hh:mm:ss

TimedeltaIndex(['0 days 00:20:00', '0 days 00:19:58', '0 days 00:00:05'], dtype='timedelta64[ns]', freq=None)

我的意思是deltas = pd.to_timedelta(times)失败,ValueError: expected hh:mm:ss format因为我没有看到format参数,就像pd.to_datetime不幸一样。

total_seconds然后,如果您想进行一些经过的时间计算,您可以访问:

>>> deltas.total_seconds()

Float64Index([1200.0, 1198.0, 5.0], dtype='float64')

我认为您仍然可以使用pd.to_datetime,但您只需添加在每个创建时间戳的日期减去午夜时间戳的步骤,如下所示:

>>> import pandas as pd

>>> times = ['20:00', '19:58', '00:05']
>>> times = pd.to_datetime(times, format="%M:%S")
>>> deltas = times - times.floor('D')
# deltas is the same as above

推荐阅读