将自开始以来经过的小数秒转换为日期时间索引
Convert fractional seconds passed since onset to a date time index
对于我的足球数据分析,要使用 pandas between_time
函数,我需要将表示从测量开始的小数秒的字符串列表转换为 pandas date_time
索引。时间数据如下:
为了实现这一点,我尝试了以下方法:
df['Time'] = df['Timestamp']*(1/freq)
df.index = pd.to_datetime(df['Time'], unit='s')
其中freq=600
和Timestamp
是从0开始往上数的帧数
我期待新索引显示以下格式:
%y%m%d-%h%m%s%f
但不幸的是,to_datetime 不知道如何处理我的时间数据类型(即开始后一直计数到 4750 秒)。
因此,我的问题是如何将时间样本数据转换为 date_time 索引。
基于this topic我现在创建了以下函数:
def timeDelta2DateTime(self, time_delta_list):
'''This method converts a list containing the time since measurement onset [seconds] into a
list containing dateTime objects counting up from 00:00:00.
Args:
time_delta_list (list): List containing the times since the measurement has started.
Returns:
list: A list with the time in the DateTime format.
'''
### Use divmod to convert seconds to m,h,s.ms ###
s, fs = list(zip(*[divmod(item, 1) for item in time_delta_list]))
m, s = list(zip(*[divmod(item, 60) for item in s]))
h, m = list(zip(*[divmod(item, 60) for item in m]))
### Create DatTime list ###
ms = [item*1000 for item in fs] # Convert fractional seconds to ms
time_list_int = list(zip(*[list(map(int,h)), list(map(int,m)), list(map(int,s)), list(map(int,ms))])) # Combine h,m,s,ms in one list
### Return dateTime object list ###
return [datetime(2018,1,1,item[0],item[1],item[2],item[3]) for item in time_list_int]
因为它看起来很慢,请随时提出更好的选择。
对于我的足球数据分析,要使用 pandas between_time
函数,我需要将表示从测量开始的小数秒的字符串列表转换为 pandas date_time
索引。时间数据如下:
为了实现这一点,我尝试了以下方法:
df['Time'] = df['Timestamp']*(1/freq)
df.index = pd.to_datetime(df['Time'], unit='s')
其中freq=600
和Timestamp
是从0开始往上数的帧数
我期待新索引显示以下格式:
%y%m%d-%h%m%s%f
但不幸的是,to_datetime 不知道如何处理我的时间数据类型(即开始后一直计数到 4750 秒)。
因此,我的问题是如何将时间样本数据转换为 date_time 索引。
基于this topic我现在创建了以下函数:
def timeDelta2DateTime(self, time_delta_list):
'''This method converts a list containing the time since measurement onset [seconds] into a
list containing dateTime objects counting up from 00:00:00.
Args:
time_delta_list (list): List containing the times since the measurement has started.
Returns:
list: A list with the time in the DateTime format.
'''
### Use divmod to convert seconds to m,h,s.ms ###
s, fs = list(zip(*[divmod(item, 1) for item in time_delta_list]))
m, s = list(zip(*[divmod(item, 60) for item in s]))
h, m = list(zip(*[divmod(item, 60) for item in m]))
### Create DatTime list ###
ms = [item*1000 for item in fs] # Convert fractional seconds to ms
time_list_int = list(zip(*[list(map(int,h)), list(map(int,m)), list(map(int,s)), list(map(int,ms))])) # Combine h,m,s,ms in one list
### Return dateTime object list ###
return [datetime(2018,1,1,item[0],item[1],item[2],item[3]) for item in time_list_int]
因为它看起来很慢,请随时提出更好的选择。