如何正确格式化时间,以便在使用matplotlib

时间:2020-08-02 12:21:37

标签: python datetime matplotlib plot datetime-format

我有包含两列的数据框,时间和值。 “时间”列中的实际值以秒。毫秒的格式给出。 我以以下方式创建了数据框:

test_df = pd.DataFrame({'Time': [1595006371.756430732,1595006372.502789381 ,1595006373.784446912 ,1595006375.476658051], 'Values': [4,5,6,10]},index=list('0123'))

然后我使用

检查“时间”列的类型

test_df.dtypes

时间列类型为float64。 然后,我用

将float64转换为datetime64 [ns]
test_df['Time']=pd.to_datetime(test_df['Time'], unit='ms')

我设置时间标签并使用

import matplotlib.pyplot as plt
plt.xlabel('Time')
ax=test_df.set_index('Time).plot(lw=3)

时间以适当的格式显示:小时:分钟:秒。 问题是“时间”列中的值显示不正确。在上面的示例中,时间跨度在1秒以内,而实际时间跨度是几秒钟。

当我对整个数据集使用相同的过程时,我得到的时间跨度以秒为单位,但是应该以小时为单位。换句话说,通过查看该图,我可以说经过的时间是几十秒,而不是应该的几个小时。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您可以使用转换器方法转换和存储seconds.millieconds。然后,您可以添加到列表并在图形中使用它。

from pandas import DataFrame


def convert(second, milli_second):
    millis = int(milli_second)
    seconds = (millis/1000) % 60
    seconds = int(seconds) + int(second)
    minutes = (millis/(1000*60)) % 60
    minutes = int(minutes)
    hours = (millis/(1000*60*60)) % 24

    return "%d:%d:%d" % (hours, minutes, seconds)


if __name__ == '__main__':
    results = []
    test_df = DataFrame({'Time': [1595006371.756430732,
                                  1595006372.502789381,
                                  1595006373.784446912,
                                  1595006375.476658051],
                         'Values': [4, 5, 6, 10]}, index=list('0123'))

    for i in test_df['Time']:
        sec, ms = str(i).split('.')
        result = convert(sec, ms)
        results.append(result)

    print(results)

输出:

['2:6:1595006375', '1:23:1595006419', '0:13:1595006377', '0:7:1595006431']
相关问题