我有一个频率不规则的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