繁体   English   中英

绘制时间序列python

[英]Plotting time series python

我刚接触Python,因此对任何错误的术语深表歉意。 我正在尝试使用matplotlib绘制从CSV文件获得的数据。 我读过matplotlib仅接受以strptime()创建的格式传递给它的计时数据。 我的问题源于以下事实:从数据收集之日的午夜起,时间数据以HH:MM格式提供给我。 麻烦的是,它没有以分钟为单位给出我的实际时间,而是以分钟的小数部分表示秒。 我希望在数据中具有亚分钟分辨率,因此,当将每个基准传递到strptime()时,如何将04:26.9这样的基准转换为更常规的04:26:54。

提前致谢 :)

看起来只是一个算法问题,与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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM