我想将数据集从 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 轴上绘制秒表列,并在 x 轴上绘制时间格式 (HH:MM) 的标签和日期列。如果我可以指定,例如 if time < 06:00 : time = time + 24:00 - 我的意思是 Stopwatch2 列中的 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)。
最佳答案
不确定我是否正确理解输出,但这会是您正在寻找的东西吗?
我将 Stopwatch1 添加为 datetime
,以便 matplotlib dates
模块能够理解并帮助正确格式化它:
df['Stopwatch1'] = pd.to_datetime(df["Stopwatch1"])
from matplotlib import dates as mdates
fig, ax = plt.subplots()
ax.plot(df['Stopwatch1'])
ax.yaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))
如果您还希望将日期作为 x 轴,则可以将其设置为索引,因此观测值之间的距离将基于日期距离。
df['Date'] = pd.to_datetime(df["Date"])
df = df.set_index('Date')
fig, ax = plt.subplots()
ax.plot(df.index, df['Stopwatch1'])
ax.set_xticks(df.index)
ax.yaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
关于python - 如何将没有日期的excel时间转换为pandas数据框然后绘制它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57590594/