Python:我可以将日期时间转换为粒度小于一整天的浮点值吗



我正在尝试绘制血压读数,每个读数都有一个日期时间戳,其中包含读数的日期和小时:分钟:秒。

由于许多Seaborn回归图(lmplot、regplot等(不支持日期时间戳,我采用了创建一个新的数据帧列的方法,该列具有如下数字序数:

from datetime import date
df['date_ordinal'] = pd.to_datetime(df['date']).apply(lambda date: date.toordinal())

这是可行的,但问题是在同一天内读取的多个读数都叠加在同一个x轴点上。

有没有比序数更好的功能来实现在同一天用序数后的十进制值分离读数?

您可以计算date列中的每个datetime与最旧的datetime之间的timedeltas,然后使用timedelta的秒数。这意味着计算自最早时间戳以来的相对时间(以秒为单位(

df['seconds_since_start'] = df['date'].apply(lambda date: (date - df['date'].min()).seconds)

从这里,您可以使用基本数学将秒转换为天(带十进制值(:

df['days_since_start'] = df['seconds_since_start'] / (60 * 60 * 24)

感谢@jfaccioni向正确的方向暗示:(以下是我所做的。

首先,将datetime对象转换为float,以便seaborn的散点图可以使用它。

我使用了时间戳函数,它将日期时间转换为历元(1970年1月1日起的秒数(:

df['date_ordinal'] = pd.to_datetime(df['Measurement Date']).apply(lambda date: date.timestamp())

这样我就解决了我的需要。为了帮助有类似需求的人,这里有第二部分。

如何将那些大的秒数转换回日期字符串,以便它们可以用作我的seaborn x轴图的标签:

# now convert the epoch values back to a YYYY-MM-DD string for the x labels
# localtime converts the epoch into a datetime object abd strftime converts it into a string
new_labels = [time.strftime('%Y-%m-%d',time.localtime(item)) for item in ax.get_xticks()]
ax.set_xticklabels(new_labels)

最新更新