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

Posted

技术标签:

【中文标题】将日期时间列拆分为单独的日期和时间列【英文标题】:Split datetime column into separate date and time columns 【发布时间】:2018-08-28 07:16:21 【问题描述】:

我正在尝试从时间戳中提取日期和时间:

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】:

选项 1 由于您实际上并不需要对 dates 本身进行操作,因此只需将您的列拆分为空间:

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

df
         Date   Time
0  31/12/2015  22:45

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

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

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

df
       Time       Date
0  22:45:00 2015-12-31

【讨论】:

【参考方案2】:

试试 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

【讨论】:

【参考方案3】:

如果您的DateTime 列已经是日期时间类型,则无需调用pd.to_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

【讨论】:

以上是关于将日期时间列拆分为单独的日期和时间列的主要内容,如果未能解决你的问题,请参考以下文章

将日期时间列拆分为日期和时间变量

在python中将日期时间拆分为年和月列

如何将包含日期时间的 DataFrame 列拆分为两列:一列包含日期,另一列包含一天中的时间?

Pandas - 根据日期将数据框拆分为多个数据框?

Matlab中tabel如何按照日期列拆分

如何在 C# 中使用 csvHelper 将两个单独列中的日期和时间合并到一个新的日期时间列中