2013-11-15 33 views
6

Bunun gibi bir Pandas veri çerçevem ​​var; (Bir Excel dosyasına ayrıştırma ile elde edilen)Tarih sütunu ve zaman sütununu datetime sütununa birleştirin

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

Sütun MEETING DATETimestamp('2013-12-20 00:00:00', tz=None) ve MEETING TIME gibi bir temsili olan bir zaman damgası Bir kolona MEETING DATE ve MEETING TIME birleştirmek isteyen datetime.time(14, 0)

gibi bir temsili olan bir datetime.time amacı ise . datetime.combine istediğimi yapıyor gibi görünüyor, ancak, bir şekilde bu işlevi bir şekilde uygulamalıyım. Bunu nasıl başarabilirim?

+0

belki 'fonksiyonunu başvurdular olabilir (ya anyfunction istediğiniz) http : //pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.apply.html – dm03514

cevap

7

yöntemden uygulamak kullanmak ve uygulamak böyle birleştirebilirsiniz:

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

Hey Ben benzer bir sorun ile sıkışmış ve bunu denedim - ama bir hata alıyorum - combine() argüman 1 Seri değil, datetime.date olmalıdır. Sanırım birleştirme tüm seriyi almıyor, her seferinde yalnızca bir öğe. Bunu nasıl halledebilirim? – pradeep

2

Diğer çözümler için beni işe yaramadı, bu yüzden bir geçici çözüm replace yerine combine kullanılarak ortaya attı:

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 
    ) 
yavaş hissediyor

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

(Ben: senin durumunda

düzgün zamanlama yapmadı, ama çalışır.

GÜNCELLEME: ben hem zaman aşımına uğramış göreceli olarak büyük bir veri kümesi (> 500.000 satır) yaklaşımları ve her ikisi de (combine için 50'li vs replace için 59s) hızlı benzer çalışma süreleri var, ama combine kullanıyor. Ayrıca, bu konuda jezrael cevabına bakın.

Update2: ben denedim jezrael 'ın yaklaşımı: Bu yaklaşım karşılaştırıldığında hızlı yanan

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

, jezrael haklı. Ancak bunu ölçemedim, ama belli ki.

Önce string ve sonra to_timedelta için Time sütun dönüştürebilirsiniz
+0

Daha hızlı bir çözüm ekliyorum, kontrol edebilirsiniz. – jezrael

+0

Ve çözümüm ne kadar hızlı? – jezrael

+0

@jezrael Üzgünüm, çalışmayı başaramadım. Şu an üzerinde zaman harcayamam. Katkınız için teşekkürler. – jabellcu

1

, daha sonra kolay toplamı her iki sütunlar: TOPLANTISI TARİH ve TOPLANTISI TIME için

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] 
İlgili konular