绘制时间序列 python
Plotting time series python
我是 Python 的新手,所以对于任何错误的术语,我深表歉意。我正在尝试使用 matplotlib 绘制从 CSV 文件中获取的数据。我读过 matplotlib 只接受以 strptime() 创建的格式传递给它的计时数据。我的问题源于这样一个事实,即从数据收集当天的午夜开始,时间数据以 HH:MM 格式提供给我。皱纹是它没有给我以秒为单位的实际时间,而是使用分钟的小数部分来表示秒。我想在我的数据中有亚分钟分辨率,所以当将每个数据传递给 strptime().[= 时,如何将 04:26.9 这样的数据变成更传统的 04:26:54 11=]
提前致谢:)
看起来只是一个算法问题,与matplotlib
无关。
import time
dates = ['23:11.1', '23:15.6']
def time_mapper(t):
hour, minsec = t.split(':')
minute, minute_fraction = minsec.split('.')
minute_fraction = int(minute_fraction) / 10 ** len(minute_fraction)
seconds = '{:02d}'.format(int(60 * minute_fraction))
t = ':'.join([hour, minute, seconds])
return time.strptime(t, '%H:%M:%S')
list(map(time_mapper, dates))
>> [time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=23, tm_min=11, tm_sec=6, tm_wday=0, tm_yday=1, tm_isdst=-1),
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=23, tm_min=15, tm_sec=36, tm_wday=0, tm_yday=1, tm_isdst=-1)]
像这样应该可以解决问题:
def decimal_minute_to_second(time_string):
# partition time string into components
hour_minute, seconds = time_string.split('.')
# convert to seconds
seconds = float(seconds) / 10 * 60
# format seconds
seconds = int(seconds) # might want to round here instead
seconds = str(seconds)
# reassemble
output_string = hour_minute + ':' + seconds
return output_string
def test(verbose=True):
test = '04:26.9'
expected = '04:26:54'
actual = decimal_minute_to_second(test)
if verbose:
print('Test string: {}'.format(test))
print('Expected string: {}'.format(expected))
print('Actual string: {}'.format(actual))
assert expected == actual
test()
# Test string: 04:26.9
# Expected string: 04:26:54
# Actual string: 04:26:54
我是 Python 的新手,所以对于任何错误的术语,我深表歉意。我正在尝试使用 matplotlib 绘制从 CSV 文件中获取的数据。我读过 matplotlib 只接受以 strptime() 创建的格式传递给它的计时数据。我的问题源于这样一个事实,即从数据收集当天的午夜开始,时间数据以 HH:MM 格式提供给我。皱纹是它没有给我以秒为单位的实际时间,而是使用分钟的小数部分来表示秒。我想在我的数据中有亚分钟分辨率,所以当将每个数据传递给 strptime().[= 时,如何将 04:26.9 这样的数据变成更传统的 04:26:54 11=]
提前致谢:)
看起来只是一个算法问题,与matplotlib
无关。
import time
dates = ['23:11.1', '23:15.6']
def time_mapper(t):
hour, minsec = t.split(':')
minute, minute_fraction = minsec.split('.')
minute_fraction = int(minute_fraction) / 10 ** len(minute_fraction)
seconds = '{:02d}'.format(int(60 * minute_fraction))
t = ':'.join([hour, minute, seconds])
return time.strptime(t, '%H:%M:%S')
list(map(time_mapper, dates))
>> [time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=23, tm_min=11, tm_sec=6, tm_wday=0, tm_yday=1, tm_isdst=-1),
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=23, tm_min=15, tm_sec=36, tm_wday=0, tm_yday=1, tm_isdst=-1)]
像这样应该可以解决问题:
def decimal_minute_to_second(time_string):
# partition time string into components
hour_minute, seconds = time_string.split('.')
# convert to seconds
seconds = float(seconds) / 10 * 60
# format seconds
seconds = int(seconds) # might want to round here instead
seconds = str(seconds)
# reassemble
output_string = hour_minute + ':' + seconds
return output_string
def test(verbose=True):
test = '04:26.9'
expected = '04:26:54'
actual = decimal_minute_to_second(test)
if verbose:
print('Test string: {}'.format(test))
print('Expected string: {}'.format(expected))
print('Actual string: {}'.format(actual))
assert expected == actual
test()
# Test string: 04:26.9
# Expected string: 04:26:54
# Actual string: 04:26:54