Python 如何将没有日期的excel时间转换为pandas dataframe,然后进行绘图?

Python 如何将没有日期的excel时间转换为pandas dataframe,然后进行绘图?,python,pandas,matplotlib,time,Python,Pandas,Matplotlib,Time,我想将数据集从excel文件导入pandas dataframe,然后打印它。数据集包括日期列-应转换为pd.datetime和秒表列-应转换为格式:HH:MM:SS或HH:MM或H:MM取决于数据(小时可能超过24小时,格式不应包括日期)。以下是数据中的一些行: Date Stopwatch1 Stopwatch2 Stopwatch3 Timesum 01.08.2019 00:10:05 19:05 0:45 25:01:00 02.08.2019 0

我想将数据集从excel文件导入pandas dataframe,然后打印它。数据集包括日期列-应转换为pd.datetime和秒表列-应转换为格式:HH:MM:SS或HH:MM或H:MM取决于数据(小时可能超过24小时,格式不应包括日期)。以下是数据中的一些行:

Date       Stopwatch1 Stopwatch2 Stopwatch3 Timesum
01.08.2019 00:10:05   19:05      0:45       25:01:00
02.08.2019 00:08:00   23:50      0:30       30:30:00
03.08.2019 00:05:00   00:10      0:40      124:00:00
然后,我想在y轴上绘制秒表列,标签采用时间格式(HH:MM),在x轴上绘制日期列。如果我可以指定,例如,如果时间<06:00:time=time+24:00-我的意思是,秒表2列中的00:10大于23:50,那么这应该包括在图表中

我试着做:

df = pd.read_excel(path, dtype={'Stopwatch1':str, 'Stopwatch2':str, 'Stopwatch3':str})
tmd = pd.to_timedelta(df["Stopwatch1"])
tmd.plot()

绘图正在运行,但y轴上的标签是数字。我想将它们更改为时间格式(HH:MM)。

不确定我是否正确理解输出,但这是否是您要查找的内容

我将秒表1添加为
datetime
,这样matplotlib
dates
模块可以理解并帮助正确格式化它:

df['Stopwatch1']=pd.to_datetime(df[“Stopwatch1]”)
从matplotlib导入日期为mdates
图,ax=plt.子批次()
ax.绘图(df['Stopwatch1'])
ax.yaxis.set\u major\u格式化程序(mdates.DateFormatter(“%H:%M”))

如果您还希望将日期作为x轴,可以将其设置为索引,因此观测之间的距离将基于日期距离

df['Date']=pd.to_datetime(df[“Date”])
df=df.set_索引(“日期”)
图,ax=plt.子批次()
ax.图(df.index,df['Stopwatch1']))
ax.set\u xticks(测向索引)
ax.yaxis.set\u major\u格式化程序(mdates.DateFormatter(“%H:%M”))
ax.xaxis.set\u major\u格式化程序(mdates.DateFormatter(“%Y-%m-%d”))

不确定我是否正确理解输出,但这是否是您要查找的内容

我将秒表1添加为
datetime
,这样matplotlib
dates
模块可以理解并帮助正确格式化它:

df['Stopwatch1']=pd.to_datetime(df[“Stopwatch1]”)
从matplotlib导入日期为mdates
图,ax=plt.子批次()
ax.绘图(df['Stopwatch1'])
ax.yaxis.set\u major\u格式化程序(mdates.DateFormatter(“%H:%M”))

如果您还希望将日期作为x轴,可以将其设置为索引,因此观测之间的距离将基于日期距离

df['Date']=pd.to_datetime(df[“Date”])
df=df.set_索引(“日期”)
图,ax=plt.子批次()
ax.图(df.index,df['Stopwatch1']))
ax.set\u xticks(测向索引)
ax.yaxis.set\u major\u格式化程序(mdates.DateFormatter(“%H:%M”))
ax.xaxis.set\u major\u格式化程序(mdates.DateFormatter(“%Y-%m-%d”))

我在熊猫0.24.1上的绘图效果很好。您遇到了什么问题?我再试了一次,但没有达到应有的效果,因为y轴上的标签应为时间格式(HH:MM)。如何将其设置为此格式?没有用于时间增量的转换器:。这也是一个matplotlib问题,你会想在这个标签中问这个问题。好的,但是有没有办法写这个转换器呢?它应该包括什么?你的链接不起作用。抱歉,应该是:;timedelta不在列表中该绘图在pandas 0.24.1上对我有效。您遇到了什么问题?我再试了一次,但没有达到应有的效果,因为y轴上的标签应为时间格式(HH:MM)。如何将其设置为此格式?没有用于时间增量的转换器:。这也是一个matplotlib问题,你会想在这个标签中问这个问题。好的,但是有没有办法写这个转换器呢?它应该包括什么?你的链接不起作用。抱歉,应该是:;timedelta不在列表中这几乎是我想要的,但我仍然看到三个问题。首先,如果秒表1作为日期时间存储在数据帧中,则其格式包含当前日期。有没有可能不带日期,只带时间储存?第二个问题是,如果我想画秒表2。我如何显示例如00:10=24:10,所以应该在23:50以上绘制?最后,像Timesum中一样,超过24小时的时间存在问题。我如何以这种格式打印和存储它?你是对的,它将被限制为一天,而不是一个时间差。你说00:10应该在23:50以上是什么意思?这是因为它是在一个后续的日期(假设这可以通过Timesum进行验证?我的意思是我想指定:如果秒表2中的时间小于06:00,那么time=time+24:00(因此它应该被视为第二天,例如24:10大于23:50,但我想将24:10格式化为00:10)。有没有办法做到这一点?我所说的Timesum是指此列中的时间可能大于24小时,因此我希望以h:mm,hh:mm,hhh:mm的格式绘制和存储它…取决于数字的大小(例如2:50,30:50,100:50,2000:00).有没有可能做到这一点?一切都有可能@KrzysiekDev.让我来思考一下逻辑,再给它一次机会。这几乎就是我想要的,但我仍然看到三个问题。首先,如果秒表1以日期时间的形式存储在数据框中,它的格式包含当前日期。有没有可能以不包含日期的形式存储它,just时间?其次,如果我想绘制秒表,会出现问题2。我如何显示,例如00:10=24:10,所以应该在23:50以上绘制?最后,超过24小时的时间会出现问题,就像在时间段中一样。我如何以这种格式绘制和存储它?你是对的,它将被限制为一天,而不是时间增量。00:1是什么意思0应该在23:50以上绘制?这是因为它在后续日期(并且假设这可以通过Timesum进行验证?我的意思是我想指定:如果秒表2中的时间小于06:00,那么time=time+24:00(因此应该将其视为第二天,例如24:10大于23:50,但我想将24:10格式化为00:10).有办法吗?我说的时间是指本专栏中的时间