繁体   English   中英

在熊猫数据框中转换MATLAB日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM