2013-07-31 73 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