如何在pandas DataFrame中合并两列时间数据生成%H-%M格式时间列
方案1:基于你当前已转换完成的列直接合并
你已经单独将小时、分钟列转为了datetime类型,只需要分别提取对应时间分量拼接格式化即可:
# 提取小时、分钟分量,拼接为 %H-%M 格式 data["start"] = data["start1"].dt.hour.astype(str) + "-" + data["start2"].dt.minute.astype(str).str.zfill(2) # 结束时间列合并逻辑同理 data["end"] = data["end1"].dt.hour.astype(str) + "-" + data["end2"].dt.minute.astype(str).str.zfill(2)
其中str.zfill(2)作用是将不足两位的分钟值补前导0,比如5会转为05,符合标准时间格式要求。
方案2:更高效的预处理方案(推荐)
不需要单独对小时、分钟列做datetime转换,读入数据后直接拼接两列再做时间转换,代码更简洁:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates from datetime import timedelta # 导入数据 data = pd.read_csv('TEST.csv') # 直接拼接时分列后转换,若CSV中start1、start2为数值类型,先加.astype(str)转字符串即可 data["start"] = pd.to_datetime(data["start1"] + ":" + data["start2"], format="%H:%M").dt.strftime("%H-%M") data["end"] = pd.to_datetime(data["end1"] + ":" + data["end2"], format="%H:%M").dt.strftime("%H-%M")
如果你后续制作甘特图需要使用datetime类型而非字符串格式,移除末尾的.dt.strftime("%H-%M")即可,得到的时间对象直接适配matplotlib甘特图的时间轴参数。
内容的提问来源于stack exchange,提问作者Addm1X
相关产品推荐
相关产品推荐

