2013-11-15 153 views
6

我有一個像這樣的熊貓數據框; (通過解析excel文件獲得的)將日期列和時間列組合到日期時間列中

|  |  COMPANY NAME   | MEETING DATE  | MEETING TIME| 
-----------------------------------------------------------------------| 
|YKSGR| YAPI KREDİ SİGORTA A.Ş. | 2013-12-16 00:00:00 |14:00:00  | 
|TRCAS| TURCAS PETROL A.Ş.  | 2013-12-12 00:00:00 |13:30:00  | 

MEETING DATE是一個像Timestamp('2013-12-20 00:00:00', tz=None)MEETING TIME的表示時間戳是一個datetime.time對象與像datetime.time(14, 0)

MEETING DATEMEETING TIME組合成一列的表示。 datetime.combine似乎做我想要的,但是,我需要以某種方式應用此功能列式。我怎樣才能做到這一點?

+0

也許你可以'apply'功能(或要anyfunction)到會議日期和會議時間HTTP ://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.apply.html – dm03514

回答

7

您可以使用應用方法和應用結合起來是這樣的:

>>> df.apply(lambda x: combine(x['MEETING DATE'], x['MEETING TIME']), axis=1) 
0 2013-12-16 14:00:00 
1 2013-12-12 13:00:00 
+0

嘿我被困在一個類似的問題,我試過 - 但我得到一個錯誤 - 結合()參數1必須是datetime.date,而不是Series。 我想結合不採取整個系列,一次只有一個元素。我如何解決這個問題? – pradeep

2

其他解決方案並沒有爲我工作,所以我想出了利用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 
    ) 

你的情況:

combine_date_time(df, 'MEETING DATE', 'MEETING TIME') 

感覺慢(我有沒有正確計時),,但它的工作原理是

更新:我已超時都進行了比較大的數據集(> 500.000行)接近,並且它們都具有相似的運行時間,但使用combine更快(59S爲replace VS 50歲的combine)。另請參閱jezrael對此的回答。

UPDATE2:我已經試過jezrael的做法:

def combine_date_time(df, datecol, timecol): 
    return pd.to_datetime(df[datecol].dt.date.astype(str) 
          + ' ' 
          + df[timecol].astype(str)) 

這種方法在比較超快,jezrael是正確的。雖然我還沒有能夠衡量它,但它是顯而易見的。

+0

我添加更快的解決方案,您可以檢查它。 – jezrael

+0

我的解決方案速度有多快? – jezrael

+0

@jezrael對不起,我一直無法使它工作。我現在不能在這上面花時間。不過,謝謝你的貢獻。 – jabellcu

1

可以Time列轉換首先string,然後to_timedelta,則很容易和兩列:

print (type(df['MEETING DATE'].iat[0])) 
<class 'pandas.tslib.Timestamp'> 

print (type(df['MEETING TIME'].iat[0])) 
<class 'datetime.time'> 

print (df['MEETING DATE'] + pd.to_timedelta(df['MEETING TIME'].astype(str))) 
YKSGR 2013-12-16 14:00:00 
TRCAS 2013-12-12 13:30:00 
dtype: datetime64[ns]