Как правильно отформатировать время, чтобы его можно было правильно отображать при построении графика с использованием matplotlib - PullRequest
0 голосов
/ 02 августа 2020

У меня есть фрейм данных с двумя столбцами: время и значения. Фактические значения в столбце «Время» представлены в формате секунды-миллисекунды. Я создал фрейм данных следующим образом:

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

Затем я проверил тип столбца Time с помощью

test_df.dtypes

Тип столбца Time - float64. Затем я преобразовал float64 в datetime64 [ns] с помощью

test_df['Time']=pd.to_datetime(test_df['Time'], unit='ms')

. Я установил метку для Time и plot Values, используя

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

Время отображается в соответствующем формате часы: минуты: секунд. Проблема в том, что значения из столбца «Время» отображаются неправильно. В приведенном выше примере интервал времени находится внутри одной секунды, тогда как реальный интервал времени составляет несколько секунд.

Когда я использую ту же процедуру для всего набора данных, я получаю интервал времени в секундах , но вместо этого это должно быть в часах. Другими словами, глядя на график, я бы сказал, что прошедшее время составило несколько десятков секунд, а не несколько часов, как должно быть.

Как я могу это решить?

1 Ответ

0 голосов
/ 02 августа 2020

Вы можете конвертировать и сохранять секунды в миллисекунды, используя метод конвертера. Затем вы можете добавить его в список и использовать его в своем графике.

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']
...