2013-07-31 51 views
40

我有一个熊猫数据框,它包含以下列;使用Python熊猫组合日期和时间列

Date    Time 
01-06-2013  23:00:00 
02-06-2013  01:00:00 
02-06-2013  21:00:00 
02-06-2013  22:00:00 
02-06-2013  23:00:00 
03-06-2013  01:00:00 
03-06-2013  21:00:00 
03-06-2013  22:00:00 
03-06-2013  23:00:00 
04-06-2013  01:00:00 

如何合并数据[ '日期'] &数据[ '时间']得到以下?有没有使用pd.to_datetime的方法?

Date 
01-06-2013 23:00:00 
02-06-2013 01:00:00 
02-06-2013 21:00:00 
02-06-2013 22:00:00 
02-06-2013 23:00:00 
03-06-2013 01:00:00 
03-06-2013 21:00:00 
03-06-2013 22:00:00 
03-06-2013 23:00:00 
04-06-2013 01:00:00 
+0

什么是列的类型? – mattexx

回答

74

值得一提的是,你可能已经能够在直接例如阅读本如果您使用read_csv使用parse_dates=[['Date', 'Time']]

假设这些仅仅是字符串,你可以简单地添加在一起(中间有空格),让您应用to_datetime

In [11]: df['Date'] + ' ' + df['Time'] 
Out[11]: 
0 01-06-2013 23:00:00 
1 02-06-2013 01:00:00 
2 02-06-2013 21:00:00 
3 02-06-2013 22:00:00 
4 02-06-2013 23:00:00 
5 03-06-2013 01:00:00 
6 03-06-2013 21:00:00 
7 03-06-2013 22:00:00 
8 03-06-2013 23:00:00 
9 04-06-2013 01:00:00 
dtype: object 

In [12]: pd.to_datetime(df['Date'] + ' ' + df['Time']) 
Out[12]: 
0 2013-01-06 23:00:00 
1 2013-02-06 01:00:00 
2 2013-02-06 21:00:00 
3 2013-02-06 22:00:00 
4 2013-02-06 23:00:00 
5 2013-03-06 01:00:00 
6 2013-03-06 21:00:00 
7 2013-03-06 22:00:00 
8 2013-03-06 23:00:00 
9 2013-04-06 01:00:00 
dtype: datetime64[ns] 

注:令人惊讶的(对我来说),这正常工作与NaN的转化到NaT,但值得担心的是转换(可能使用raise参数)。

+0

酷!在这里也很有效。不需要'coerce = True' – richie

+3

'parse_dates'选项非常方便 – onewhaleid

+0

不知道自动组合功能,它也可以处理多个条目,如:'parse_dates = [[''开始日期' ,'开始时间'],['结束日期','结束时间']])'。 Pandas <3 – 5agado

16

接受的答案适用于数据类型为string的列。为了完整起见:当我在搜索如何在列的数据类型为日期和时间时执行此操作时遇到此问题。

df.apply(lambda r : pd.datetime.combine(r['date_column_name'],r['time_column_name']),1) 
4

我没有足够的声誉上jka.ne如此评论:

我不得不修改jka.ne's line为它工作:

df.apply(lambda r : pd.datetime.combine(r['date_column_name'],r['time_column_name']).time(),1) 

这可能帮助别人。

而且,我已经测试了不同的方法,使用replace代替combine

def combine_date_time(df, datecol, timecol): 
    return df.apply(lambda row: row[datecol].replace(
           hour=row[timecol].hour, 
           minute=row[timecol].minute), 
        axis=1) 

这在OP的情况是:

combine_date_time(df, 'Date', 'Time') 

我已超时这两种方法进行了比较大数据集(> 500.000行),它们都具有相似的运行时间,但使用combine更快(replace为59s,combine为50s)。

4

您可以使用它将日期和时间合并到数据帧的同一列中。

import pandas as pd  
data_file = 'data.csv' #path of your file 

阅读的.csv与合并列DATE_TIME文件:

data = pd.read_csv(data_file, parse_dates=[['Date', 'Time']]) 

您可以使用此行保留两个其他列也。

data.set_index(['Date', 'Time'], drop=False) 
+0

您也可以使用自定义'date_parser',例如'parser = lambda date:pd.datetime.strptime(date,'%d-%b-%y%H:%M:%S')' – Serendipity