Python将日期和小时合并到一列中,并使用lineplot进行打印

Python将日期和小时合并到一列中,并使用lineplot进行打印,python,pandas,datetime,matplotlib,jupyter,Python,Pandas,Datetime,Matplotlib,Jupyter,我的数据如下。我需要将这个日期和小时合并到一个列中,并且我需要为2015年及其相应的小时绘制一个直线图。 您可以创建一个新列,该列包含日期时间格式的日期,然后使用函数对其进行打印 import datetime as dt import matplotlib.pyplot as plt import pandas as pd df = pd.DataFrame({'date': ['2018-12-12', '2018-12-12', '2018-12-13'], 'hour': [22,

我的数据如下。我需要将这个日期和小时合并到一个列中,并且我需要为2015年及其相应的小时绘制一个直线图。

您可以创建一个新列,该列包含日期时间格式的日期,然后使用函数对其进行打印

import datetime as dt

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({'date': ['2018-12-12', '2018-12-12', '2018-12-13'], 'hour': [22, 23, 0], 'msg_count': [10, 20, 30]})

df['datetime'] = df.apply(
    lambda x: dt.datetime.strptime(x['date'], '%Y-%m-%d')
    + dt.timedelta(hours=x['hour']),
    axis=1)

plt.plot_date(df['datetime'], df['msg_count'])
plt.show()

尝试使用以下方法将您的
多索引
组合成一个
日期时间索引

df.set_index(pd.to_datetime(df.index.get_level_values(0) ) +
             pd.to_timedelta(df.index.get_level_values(1), unit='H'),
             inplace=True)
从您提供的数据来看,似乎存在差距,例如2015-01-01 09:00时没有“msg_count”值

要解决此问题,您可以使用
0

new_idx = pd.date_range(df.index.min(), df.index.max(), freq='H')

df.reindex(new_idx, fill_value=0, inplace=True)
要绘制2015年数据,请仅使用:

df[df.index.year == 2015].plot()

到目前为止你都试了些什么?嗨,谢谢。@Chris A workedHi给出的建议谢谢你的代码片段。我尝试了同样的方法,但得到了下面的错误。“AttributeError:(“'DataFrame'对象没有'datetime'属性,'发生在索引(2014-12-31,23)”看起来您的数据框是按
date
hour
分组的,对吗?那么您的问题是
日期
小时
是索引的一部分。在运行应用部分和绘图部分之前,应该执行
df=df.reset_index()