Python 将datetime列拆分为单独的日期和时间列

Python 将datetime列拆分为单独的日期和时间列,python,pandas,date,datetime,time,Python,Pandas,Date,Datetime,Time,我试图从时间戳中提取日期和时间: DateTime 31/12/2015 22:45 将是: Date | Time | 31/12/2015| 22:45 | 但是,当我使用: df['Date'] = pd.to_datetime(df['DateTime']).dt.date 我得到: 2015-12-31 同样,随着时间的推移,我得到: df['Time'] = pd.to_datetime(df['DateTime']).dt.time 给予 23:

我试图从时间戳中提取日期和时间:

DateTime   
31/12/2015 22:45
将是:

   Date   |  Time   |
31/12/2015|  22:45  |
但是,当我使用:

df['Date'] = pd.to_datetime(df['DateTime']).dt.date
我得到:

2015-12-31
同样,随着时间的推移,我得到:

df['Time'] = pd.to_datetime(df['DateTime']).dt.time
给予

23:45:00
但是如果我尝试格式化它,我会得到一个错误:

df['Date'] = pd.to_datetime(f['DateTime'], format='%d/%m/%Y').dt.date

ValueError: unconverted data remains:  00:00

选项1
由于您实际上不需要对日期本身进行操作,只需在空格上拆分您的列:

df = df.DateTime.str.split(expand=True)   
df.columns = ['Date', 'Time']


选项2
或者,只需完全删除格式说明符:

v = pd.to_datetime(df['DateTime'], errors='coerce')

df['Time'] = v.dt.time
df['Date'] = v.dt.floor('D')

试试strftime

df['DateTime'] = pd.to_datetime(df['DateTime'])
df['Date'] = df['DateTime'].dt.strftime('%d/%m/%Y')
df['Time'] = df['DateTime'].dt.strftime('%H:%M')


    DateTime            Date        Time
0   2015-12-31 22:45:00 31/12/2015  22:45

如果您的
DateTime
列已经是DateTime类型,则不需要调用
pd.to\u DateTime

您是在寻找字符串(
“12:34”
)还是时间戳(下午
12:34
的概念)?如果你在寻找前者,这里有一些答案可以说明这一点。如果要查找后者,可以使用
.dt.time
.dt.date
访问器

>>> pd.__version__
u'0.20.2'
>>> df = pd.DataFrame({'DateTime':pd.date_range(start='2018-01-01', end='2018-01-10')})
>>> df['date'] = df.DateTime.dt.date
>>> df['time'] = df.DateTime.dt.time
>>> df
    DateTime        date      time
0 2018-01-01  2018-01-01  00:00:00
1 2018-01-02  2018-01-02  00:00:00
2 2018-01-03  2018-01-03  00:00:00
3 2018-01-04  2018-01-04  00:00:00
4 2018-01-05  2018-01-05  00:00:00
5 2018-01-06  2018-01-06  00:00:00
6 2018-01-07  2018-01-07  00:00:00
7 2018-01-08  2018-01-08  00:00:00
8 2018-01-09  2018-01-09  00:00:00
9 2018-01-10  2018-01-10  00:00:00
df['DateTime'] = pd.to_datetime(df['DateTime'])
df['Date'] = df['DateTime'].dt.strftime('%d/%m/%Y')
df['Time'] = df['DateTime'].dt.strftime('%H:%M')


    DateTime            Date        Time
0   2015-12-31 22:45:00 31/12/2015  22:45
>>> pd.__version__
u'0.20.2'
>>> df = pd.DataFrame({'DateTime':pd.date_range(start='2018-01-01', end='2018-01-10')})
>>> df['date'] = df.DateTime.dt.date
>>> df['time'] = df.DateTime.dt.time
>>> df
    DateTime        date      time
0 2018-01-01  2018-01-01  00:00:00
1 2018-01-02  2018-01-02  00:00:00
2 2018-01-03  2018-01-03  00:00:00
3 2018-01-04  2018-01-04  00:00:00
4 2018-01-05  2018-01-05  00:00:00
5 2018-01-06  2018-01-06  00:00:00
6 2018-01-07  2018-01-07  00:00:00
7 2018-01-08  2018-01-08  00:00:00
8 2018-01-09  2018-01-09  00:00:00
9 2018-01-10  2018-01-10  00:00:00