无法在Python中将Matlab时间戳转换为日期时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在Python中将Matlab时间戳转换为日期时间相关的知识,希望对你有一定的参考价值。

我正在尝试将时间戳列转换为日期时间。这是我的数据集的一部分:

Time,INDOOR Ambient Temp.,INDOOR Relative Humidity,INDOOR Air Velocity,INDOOR Mean Radiant Temp.,INDOOR Lumens,INDOOR CO2,Predicted Mean Vote (PMV)
735080.010417,24.584695,63.70399999999999,0.030988,24.584695,,-0.269505
735080.020833,24.584695,63.856,0.030988,24.584695,,-0.26837300000000003

使用以下代码解析为日期时间时:

# Load data
df = pd.read_csv("ContData.txt", parse_dates=['Time'])

# Group by day and compute the max temp per day
df.index = df['Time']

pd.to_datetime(df['Time']).apply(lambda x: x.date())

# Identify the day, month and year
df['day'] = df['Time'].map(lambda x: x.day)
df['month'] = df['Time'].map(lambda x: x.month)
df['year'] = df['Time'].map(lambda x: x.year)

我收到以下错误:

ValueError: hour must be in 0..23
答案

由于您添加的是Matlab绝对时间,请尝试以下操作:

def datenum_to_datetime(datenum):
    """
    Convert Matlab datenum into Python datetime.
    :param datenum: Date in datenum format
    :return:        Datetime object corresponding to datenum.
    """
    days = datenum % 1
    return datetime.fromordinal(int(datenum)) \
           + timedelta(days=days) \
           - timedelta(days=366)
print(datenum_to_datetime(your_value))
另一答案

Matlab认为原点是1月0日,0000,然后将日期输出为从那以后的天数。这造成了一个问题,因为这不是真实的日期,并且超出了datetime64[ns]的范围。通过相对于POSIX原点(1970-01-01)的简单减法,可以使用矢量化的pd.to_datetime转换。

import pandas as pd
from datetime import datetime

# Additional 366 because January 0, year 0000 
offset = datetime(1970, 1, 1).toordinal() + 366  #718797

pd.to_datetime(df['Time']-offset, unit='D')
#0   2012-07-30 00:15:00.028799999
#1   2012-07-30 00:29:59.971200000
#Name: Time, dtype: datetime64[ns]

以上是关于无法在Python中将Matlab时间戳转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中将普通时间戳转换为纪元时间戳

在 Pandas 中将字符串列转换为日期的有效方法(在 Python 中),但没有时间戳

在 Python 中将 datetime.date 转换为 UTC 时间戳

如何在雪花中将时间戳转换为日期

怎么在Oracle中将时间戳转化为日期格式

如何在 Presto 中将时间戳转换为日期?