如何绘制一天中的日期时间-Matplotlib

时间:2019-03-23 08:56:00

标签: python pandas datetime matplotlib plot

我正在尝试导入和绘制午夜之后的日期时间。输入数据集没有附加日期时间,因此我必须重新格式化该列,以使午夜之后的时间戳记延续到当天。这是一个错误。

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 个答案:

答案 0 :(得分:1)

问题是“ 0/1/1900”不是正确格式的日期(“ 1/1/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