微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 将多个列转换为datetime而没有pandas中的日期

我有一个包含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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐