python - 如何将没有日期的excel时间转换为pandas数据框然后绘制它?

标签 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 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"))

enter image description here

如果您还希望将日期作为 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"))

enter image description here

关于python - 如何将没有日期的excel时间转换为pandas数据框然后绘制它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57590594/

相关文章:

pandas - 猫图的 Seaborn FacetGrid

python - 计算 pandas 中的连续重复值

python - 如何在 python 3 中使用输入流?

python - 如何使用matplotlib在x轴上附加单个标记的刻度线?

python - 使用列数组向量化 pandas 数据框列查找

python - 根据出现对数组元素进行分组,保持顺序,获取第一个和最后一个索引

python - 如何使用 Matplotlib 绘制 Shapely 多边形和对象?

python - 如何防止 perfplot (matplotlib) 图形标签被截断?

python - 如何在 pandas 中按行对数据进行分组

python - 拟合 Keras 模型会产生错误 "constant folding failed: Invalid argument: Unsupported type: 21"