python - 为什么 Python pandas 将任意时间信息分配给 datetime 对象?
问题描述
Python pandas (0.24.1) 正在向我的 datetime 对象添加看似任意数量的小时、分钟和秒。这似乎是出乎意料的默认行为;我希望时间组件默认为午夜(00:00:00)。这是一个错误吗?
import pandas as pd
df = pd.DataFrame( {'yr': [2019, 2019],
'mo': [9, 9],
'dy': [25, 26]} )
df['dtime'] = ( pd.to_datetime(df['yr'],format='%Y')
+pd.to_timedelta(df['mo']-1,unit='M')
+pd.to_timedelta(df['dy']-1,unit='d') )
print('pandas version == '+pd.__version__)
df
################################################
OUTPUT:
################################################
pandas version == 0.24.1
yr mo dy dtime
0 2019 9 25 2019-09-25 11:52:48
1 2019 9 26 2019-09-26 11:52:48
解决方案
为了补充 Jezrael 上面指出的 timedelta 问题的详细信息,月份转换的问题如下:Pandas timedelta 将月份定义为一年的 1/12,即基于闰年逻辑的 365.2425 天。
243 天 11:52:48 是 21037968 秒。
>>> 243*60*60*24+11*60*60+52*60+48
21037968
一些维度分析证实这是一年的 8/12,即 365.2425 天。
>>> 21037968/((8/12)*365.2425*60*60*24)
1.0
如上所述,使用 to_datetime 来避免这种情况。
推荐阅读
- css - 网页不是 100% 宽度
- node.js - 如何从选择菜单中提取帖子数据?选择的选项链接到 postgresql 数据库
- bash - 如何在 Bash 中将变量设置为“docker-compose restart”命令的输出?
- javascript - 变量不能按预期工作 javascript - html
- hive - Sqoop 命令引用了不正确的 DERBY 模式
- windows - 如何在 git bash 中设置环境变量?
- firebase - 登录和注册屏幕无法显示或关闭
- ios - 平移手势视图上/下滑动动画不流畅
- angular - 手动检查复选框后无法以编程方式取消选中:Angular
- c - C中的有符号整数溢出