无法在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时间戳转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章
在 Pandas 中将字符串列转换为日期的有效方法(在 Python 中),但没有时间戳