【问题标题】:Convert time object to datetime format in python pandas在python pandas中将时间对象转换为日期时间格式
【发布时间】:2019-04-27 11:02:38
【问题描述】:

我有一个列名为 DateTime 的数据集,其 dtype object

df['DateTime'] = pd.to_datetime(df['DateTime'])

我已使用上述代码转换为 datetime 格式,然后在列中进行拆分以分别具有 DateTime p>

df['date'] = df['DateTime'].dt.date
df['time'] = df['DateTime'].dt.time

但在拆分后,格式更改为对象类型,并且在将其转换为日期时间时,它显示 time 列名称的错误为:TypeError: is not convertible to datetime

如何将时间列转换为日期时间格式

【问题讨论】:

  • “正确的时间格式”是什么意思...?请显示您正在使用的产生 TypeError: is not convertible to datetime 的代码
  • 我展示的用于转换 DateTime 的相同代码,即 df['time'] = pd.to_datetime(df.['time'])
  • @NadeemHaque - 像df['time'] = pd.to_datetime(df.['time'].astype(str)) 一样需要转换为字符串,但随后会添加一些日期,因为不存在没有日期的日期时间。
  • @jezrael 我是 python 新手所以很困惑.. 谢谢你的帮助

标签: python python-3.x pandas datetime dataframe


【解决方案1】:

如何将时间列转换回日期时间格式

似乎有误会。 Pandas datetime 系列必须包含日期和时间组件。这是没有商量余地的。您可以简单地使用pd.to_datetime 而不指定日期并使用默认的1900-01-01 日期:

# date from jezrael

print(pd.to_datetime(df['time'], format='%H:%M:%S'))

0   1900-01-01 12:48:20
1   1900-01-01 12:30:45
Name: time, dtype: datetime64[ns]

或者使用其他日期组件,例如今天的日期:

today = pd.Timestamp('today').strftime('%Y-%m-%d')
print(pd.to_datetime(today + ' '  + df['time'].astype(str)))

0   2018-11-25 12:48:20
1   2018-11-25 12:30:45
Name: time, dtype: datetime64[ns]

或从您的datetime 系列重新组合:

print(pd.to_datetime(df['date'].astype(str) + ' ' + df['time'].astype(str)))

0   2011-01-01 12:48:20
1   2014-01-01 12:30:45
dtype: datetime64[ns]

【讨论】:

  • @NadeemHaque,很高兴我的回答对您有所帮助。请认为marking它是正确的,这样它也可以帮助其他人检查这个问题。
【解决方案2】:

您可以在列表理解中使用combinezip

df = pd.DataFrame({'DateTime': ['2011-01-01 12:48:20', '2014-01-01 12:30:45']})
df['DateTime'] = pd.to_datetime(df['DateTime'])

df['date'] = df['DateTime'].dt.date
df['time'] = df['DateTime'].dt.time

import datetime
df['new'] = [datetime.datetime.combine(a, b) for a, b in zip(df['date'], df['time'])]
print (df)

             DateTime        date      time                 new
0 2011-01-01 12:48:20  2011-01-01  12:48:20 2011-01-01 12:48:20
1 2014-01-01 12:30:45  2014-01-01  12:30:45 2014-01-01 12:30:45

或者转换成字符串,连接在一起再转换:

df['new'] = pd.to_datetime(df['date'].astype(str) + ' ' +df['time'].astype(str))
print (df)
             DateTime        date      time                 new
0 2011-01-01 12:48:20  2011-01-01  12:48:20 2011-01-01 12:48:20
1 2014-01-01 12:30:45  2014-01-01  12:30:45 2014-01-01 12:30:45

但如果使用floor 删除时间并将时间转换为时间增量,则仅使用+

df['date'] = df['DateTime'].dt.floor('d')
df['time'] = pd.to_timedelta(df['DateTime'].dt.strftime('%H:%M:%S'))

df['new'] = df['date'] + df['time']
print (df)

             DateTime       date     time                 new
0 2011-01-01 12:48:20 2011-01-01 12:48:20 2011-01-01 12:48:20
1 2014-01-01 12:30:45 2014-01-01 12:30:45 2014-01-01 12:30:45

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2020-09-08
    相关资源
    最近更新 更多