python-3.x - 溢出错误:将matlab datenum转换为python datetime时日期值超出范围
问题描述
我正在尝试使用以下函数将 matlab datenum 格式的 pandas 数据框列转换为 python 日期时间格式:
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
date = datetime.fromordinal(int(datenum)) \
+ timedelta(days=days) \
- timedelta(days=366)
return date.year
值的样本
0 693726
1 693726
2 693726
3 693726
4 693726
...
460718 726831
460719 726831
460720 726831
460721 726831
460722 726831
Name: dob, Length: 460723, dtype: int32
但是当我尝试应用该功能时出现以下错误。
df['dob'] = df['dob'].apply(datenum_to_datetime)
OverflowError Traceback (most recent call last)
<ipython-input-67-cc4fb607b497> in <module>()
----> 1 df['dob'] = df['dob'].apply(datenum_to_datetime)
2 df.head()
1 frames
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
<ipython-input-66-bab915eae5ff> in datenum_to_datetime(datenum)
6 """
7 days = datenum % 1
----> 8 date = datetime.fromordinal(int(datenum)) + timedelta(days=2) - timedelta(days=366)
9
10 return date.year
OverflowError: date value out of range
解决方案
在Converting Matlab's datenum format to Python之后没有找到单一的解决方案,但是这个函数没有错误地工作
def datenum_to_datetime(datenum):
"""
Convert Matlab datenum into Python datetime.
:param datenum: Date in datenum format
:return: Datetime object corresponding to datenum.
"""
origin = np.datetime64('0000-01-01', 'D') - np.timedelta64(1, 'D')
date = datenum * np.timedelta64(1, 'D') + origin
year = date.astype('datetime64[Y]').astype(int) + 1970
return year
推荐阅读
- python - 分配之前引用的局部变量“final_result”我正在制作一个 django 计算器网络应用程序,但我遇到了这个错误
- python - 将短语列表写入 csv 文件
- javascript - 将 async/await 与 respondWith 一起使用
- vscode-settings - 我可以在 Vscode 中创建自定义的 launch.json 文件吗
- python - Python中的二维列表编辑
- reactjs - 如何将 React js 与 Laravel 8 集成?
- node.js - 如何使用 typeorm 为 DB 中的关系命名?
- c# - Xamarin 不在同一页面中显示来自第二个 CollectionView 的内容
- javascript - 将鼠标悬停动作添加到表中的每一行
- python - 如何栅格化矢量数据(线)并在 python 中沿线插入值?