在python pandas中将时间对象转换为日期时间格式

Nad*_*que 5 python datetime dataframe python-3.x pandas

我有一个列名DateTime具有 dtype object的数据集。

df['DateTime'] = pd.to_datetime(df['DateTime'])
Run Code Online (Sandbox Code Playgroud)

我用上面的代码转换为日期时间格式,然后做在列拆分有日期时间分别

df['date'] = df['DateTime'].dt.date
df['time'] = df['DateTime'].dt.time
Run Code Online (Sandbox Code Playgroud)

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

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

jez*_*ael 5

您可以combine在列表理解中使用zip

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
Run Code Online (Sandbox Code Playgroud)

或转换为字符串,连接在一起并再次转换:

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
Run Code Online (Sandbox Code Playgroud)

但是,如果floor用于将时间转换为 timedeltas 的删除时间,则+仅使用:

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
Run Code Online (Sandbox Code Playgroud)