python – 将多个列转换为datetime而没有pandas中的日期
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 将多个列转换为datetime而没有pandas中的日期,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1747字,纯文字阅读大概需要3分钟。
内容图文
我有一个包含3列的数据框,一个用于小时,一个用于分钟,一个用于第二列,如下所示:
df = pd.DataFrame({'hour': [9.0, 9.0, 9.0, 10.0],
'min': [12.0, 13.0, 55.0, 2.0],
'sec': [42.0, 30.0, 12.0, 5.0]})
>>> df
hour min sec
0 9.0 12.0 42.0
1 9.0 13.0 30.0
2 9.0 55.0 12.0
3 10.0 2.0 5.0
我正在尝试将这三列组合成一个由日期时间序列组成的新列.目标是拥有此数据框:
hour min sec time
0 9.0 12.0 42.0 9:12:42
1 9.0 13.0 30.0 9:13:30
2 9.0 55.0 12.0 9:55:12
3 10.0 2.0 5.0 10:02:05
到目前为止,我正在尝试使用pd.to_datetime,因此:
df['time'] = pd.to_datetime(df[['hour', 'min', 'sec']],
format = '%H:%M:S')
但是我得到以下ValueError:
ValueError:要组合映射,至少需要指定[year,month,day]:[day,month,year]缺失.
我试图通过仅包含一分钟秒的格式参数来避免这种情况,但显然这不起作用.
一个类似的问题被问到here,但提出的解决方案在这种情况下似乎不起作用,我仍然得到这个ValueError
任何解决这个问题的想法将不胜感激!
谢谢!
[编辑]:我还需要能够处理NaN的方法,所以这样的数据帧如下:
df = pd.DataFrame({'hour': [9.0, 9.0, 9.0, 10.0, np.nan],
'min': [12.0, 13.0, 55.0, 2.0, np.nan],
'sec': [42.0, 30.0, 12.0, 5.0, np.nan]})
@PiRSquared提出的解决方案有效
解决方法:
我们可以在具有必需列名的数据框上使用pd.to_datetime来创建一系列日期时间.
但是,OP的初始数据帧有一个’min’列,需要重命名为’minute’,’sec’列需要重命名为’second’.
此外,我将使用pd.DataFrame.assign添加缺少的列’year’,’month’和’day’.
最后,我将再次使用pd.DataFrame.assign添加’time’列.
new = dict(year=2017, month=1, day=1)
rnm = dict(min='minute', sec='second')
df.assign(
time=pd.to_datetime(
df.rename(columns=rnm).assign(**new)
).dt.time
)
hour min sec time
0 9.0 12.0 42.0 09:12:42
1 9.0 13.0 30.0 09:13:30
2 9.0 55.0 12.0 09:55:12
3 10.0 2.0 5.0 10:02:05
内容总结
以上是互联网集市为您收集整理的python – 将多个列转换为datetime而没有pandas中的日期全部内容,希望文章能够帮你解决python – 将多个列转换为datetime而没有pandas中的日期所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。