如何将时间序列转换为%M:%S.%f从00:00.00开始



我有一个频率不规则的20分钟测量的输出(每个测量点之间的时间增量不同(,存储在一个带有unix时间戳的csv文件中,时间采用iso格式:

unix_timestamp      time_iso                        data  
1602159331.000000   2020-10-08T12:15:31.00+00:00    10
1602159331.152680   2020-10-08T12:15:31.15+00:00    3
1602159331.222114   2020-10-08T12:15:31.22+00:00    5
...                 ...                             ...
1602160747.73929    2020-10-08T12:35:31.00+00:00    7

实际时间无关紧要。唯一相关的时间是与第一个测量点相比的时间增量。所以实际上我想要这些数据:

time(%M:%S.%f)     data
00:00.00           10
00:00.15           3
00:00.22           5
...                ...
00:20.00           7

有没有一种很好的方法可以将时间转换为所需的格式,但保留与时间相关的数据类型的信息?

使用:

df['time_iso'] = pd.to_datetime(df['time_iso'])
df['time_iso'] = df['time_iso'].sub(df['time_iso'].iat[0])
print (df)
unix_timestamp               time_iso  data
0    1.602159e+09        0 days 00:00:00    10
1    1.602159e+09 0 days 00:00:00.150000     3
2    1.602159e+09 0 days 00:00:00.220000     5
3    1.602161e+09        0 days 00:20:00     7

然后对于自定义格式使用自定义功能:

df['time_iso'] = pd.to_datetime(df['time_iso'])

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

df['time_iso'] = df['time_iso'].sub(df['time_iso'].iat[0]).apply(format_timedelta)
print (df)
unix_timestamp  time_iso  data
0    1.602159e+09  00:00.00    10
1    1.602159e+09  00:00.15     3
2    1.602159e+09  00:00.22     5
3    1.602161e+09  20:00.00     7

首次导入datetime

from datetime import datetime

将unix时间戳转换为整数

ts = int(unix_timestamp)

最后,格式化时间戳

datetime.utcfromtimestamp(ts).strftime('%H:%M:%S')  # Printing this gives output as following HOURS:MINUTES:SECONDS

相关内容

最新更新