[英]Convert matlab date in pandas dataframe
我有一组Matlab格式的时间戳,我需要在熊猫数据框中将其转换为Python日期时间。
df = pd.DataFrame(data=[737098.4, 737098.5, 737098.6, 737098.7], columns=['matlab_datenum'])
df
matlab_datenum
0 737098.4
1 737098.5
2 737098.6
3 737098.7
我遇到了以下代码,将matlab dateformat转换为python格式,但不确定如何在数据框中实现
python_datetime = datetime.fromordinal(int(matlab_datenum)) + timedelta(days=matlab_datenum%1) - timedelta(days = 366)
欢迎来到apply
功能世界-
df['python_datetime'] = df['matlab_datenum'].apply(lambda matlab_datenum: datetime.fromordinal(int(matlab_datenum)) + timedelta(days=matlab_datenum%1))
因此,对于数据matlab_datenum
存在的每个matlab_datenum, apply
函数实际上将对其进行迭代并执行匿名函数lambda
已定义为将每个对应的matlab_datenum
转换为python datetime。
希望有帮助!
上述答案有一个问题,您应该考虑时间偏移; 采用:
.apply(lambda matlab_datenum: date.fromordinal(int(matlab_datenum)) + timedelta(days=matlab_datenum%1) - timedelta(days = 366))
更快的解决方案是直接使用pandas to_datetime
函数。 这种方法的优势在于,它也可以用于实现超过几天的分辨率(我在下面的代码中使用了几秒钟)。
import pandas as pd
#719529 is the number of days from matlab epoch to Unix epoch
pd.to_datetime(matlab_datenum-719529,unit='d').round('s')
一个简单的例子:
matlab_datenum=np.array([737694.83333333, 737694.84027778, 737694.84722222])
In [107]: pd.to_datetime(matlab_datenum-719529,unit='d').round('s')
Out[107]: DatetimeIndex(['2019-09-26 20:00:00', '2019-09-26 20:10:00','2019-09-26 20:20:00'],
dtype='datetime64[ns]', freq=None)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.