Как построить график времени за день - Matplotlib - PullRequest
0 голосов
/ 23 марта 2019

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

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dates

d = ({
    'Time' : ['0/1/1900 8:10:00', '0/1/1900 12:10:00', '0/1/1900 22:10:00', '1/1/1900 1:10:00'],                 
    'Value' : [1,2,3,4],                                
     })

df = pd.DataFrame(data = d)

df['Time'] = pd.to_datetime(df['Time'], format='%d/%m/%Y %H:%M:%S')
df.plot(x='Time', y='Value')
formatter = dates.DateFormatter('%Y-%m-%d %H:%M:%S') 
plt.gcf().axes[0].xaxis.set_major_formatter(formatter)

Ошибка:

ValueError: time data '0/1/1900 8:10:00' does not match format '%d/%m/%Y %H:%M:%S' (match)

Я понимаю, что они не совпадают. Но я не уверен, что будет наиболее эффективным обходным путем. Могу ли я добавить день? Или есть ли лучший способ просто ввести метки времени и добавить 24 часа к меткам времени после полуночи?

1 Ответ

1 голос
/ 23 марта 2019

Проблема в том, что «01.01.1900» не является правильно отформатированной датой («01.01.1900» будет в порядке). Мы можем увеличить день месяца на единицу:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dates

d = ({
    'Time' : ['0/1/1900 8:10:00', '0/1/1900 12:10:00', '0/1/1900 22:10:00', '1/1/1900 1:10:00'],                 
    'Value' : [1,2,3,4],                                
     })
df = pd.DataFrame(data = d)

df['Time'] = ['/'.join([str(int(x.split('/')[0])+1)] + x.split('/')[1:]) for x in d['Time']]

df['Time'] = pd.to_datetime(df['Time'], format='%d/%m/%Y %H:%M:%S')
df.plot(x='Time', y='Value')
formatter = dates.DateFormatter('%Y-%m-%d %H:%M:%S') 
plt.gcf().axes[0].xaxis.set_major_formatter(formatter)

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...