2013-11-15 4 views
6

私はこのようなパンダのデータフレームを持っています。 (Excelファイルを解析することにより得られる)日付カラムと時刻カラムをdatetimeカラムに結合

|  |  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 DATETimestamp('2013-12-20 00:00:00', tz=None)のような表現とタイムスタンプであるとMEETING TIMEは、私は1つの列にMEETING DATEMEETING TIMEを組み合わせたいdatetime.time(14, 0)

のような表現を持つdatetime.timeオブジェクトであります。 datetime.combineは私が望むように思えますが、私は何とかこの機能を列方向に適用する必要があります。どうすればこれを達成できますか?

+0

おそらくあなたは '(あなたが欲しいかanyfunction)機能をapply'でき、MEETING TIME 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

私は同様の問題を抱えていましたが、これを試みましたが、エラーが発生しました - combine()引き数1シリーズではなくdatetime.dateでなければなりません。 私は、組み合わせ全体が一度に1つの要素だけ、シリーズ全体を取っていないと思います。これをどうやって回避するのですか? – pradeep

2

他のソリューションは、私のために動作しませんでしたので、私が代わりにcombinereplaceを使用して回避策を思い付いた:

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

(私が持っている:あなたのケースで

正常にタイムアウトしていない)、ですが、で動作します。

UPDATE:私は、比較的大きなデータセット(> 500.000行)のために近づき、彼らの両方が同様の実行時間を持っていますが、combineを使用する(combineための50代対replace用59S)高速です両方時限います。また、jezrael答えを参照してください。

アップデート2:私は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

あなたはその後、簡単に合計は両方の列で、string、その後to_timedeltaに最初Time列を変換することができます:MEETINGのDATEに

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]