2016-09-05 17 views
1

私はこのようなDataFrameを持っています: そして、このDataFrameはdf_NoMissing_IDVと呼ばれています。python - python pandasの2つの列間の日時計算

NoDemande NoUsager Sens IdVehiculeUtilise Fait HeureArriveeSurSite HeureEffective  Periods 
42196000013 000001 +   287Véh   1 11/07/2015 08:02:07 11/07/2015 08:02:13 Matin 
42196000013 000001 -   287Véh   1 11/07/2015 08:17:09 11/07/2015 08:17:13 Matin 
42196000002 000314 +   263Véh   1 11/07/2015 09:37:43 11/07/2015 09:53:37 Matin 
42196000016 002372 +   287Véh   1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin 
42196000015 000466 +   287Véh   1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin 
42196000002 000314 -   263Véh   1 11/07/2015 10:25:17 11/07/2015 10:38:11 Matin 
42196000015 000466 -   287Véh   1 11/07/2015 10:48:51 11/07/2015 10:51:30 Matin 
42196000016 002372 -   287Véh   1 11/07/2015 11:40:56 11/07/2015 11:41:01 Matin 
42196000004 002641 +   263Véh   1 11/07/2015 13:39:29 11/07/2015 13:52:50 Soir 
42196000004 002641 -   263Véh   1 11/07/2015 13:59:56 11/07/2015 14:07:41 Soir 

私は、列HeureArriveeSurSiteHeureEffective間のマージを取得する必要があり、彼らはすでにdatetime.datetime()データです。

df1という新しいDataFrameがあります。彼らはすべてのdatetime.datetime()のデータがあるので、私は直接減算を実行しようとしました

NoDemande NoUsager Sens IdVehiculeUtilise Fait HeureArriveeSurSite HeureEffective  Periods 
42196000013 000001 +   287Véh   1 11/07/2015 08:02:07 11/07/2015 08:02:13 Matin 
42196000002 000314 +   263Véh   1 11/07/2015 09:37:43 11/07/2015 09:53:37 Matin 
42196000016 002372 +   287Véh   1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin 
42196000015 000466 +   287Véh   1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin 

df1 = df_NoMissing_IDV[(df_NoMissing_IDV['Sens'] == '+') & (df_NoMissing_IDV['Periods'] == 'Matin')] 

そしてdf1は、このようになります

df_NoMissing_IDV['DureeService'] = df1['HeureEffective']-df1['HeureArriveeSurSite'] 

しかし、それはTypeError: unsupported operand type(s) for -: 'unicode' and 'unicode'

を返さ

そして私も計算をしようとしましたdatetime.time()タイプで、TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'と返されました。どうすればいいですか?

EDIT

私はdatetime()からdf1の列を変換:

df1.HeureArriveeSurSite = pd.to_datetime(df1.HeureArriveeSurSite) 
df1.HeureEffective = pd.to_datetime(df1.HeureEffective) 

しかし、次のステップはまだ間違って返された:ValueError: cannot reindex from a duplicate axis

を私はdatetime()df_NoMissing_IDVで列を変換する場合:

df_NoMissing_IDV.HeureArriveeSurSite = pd.to_datetime(df_NoMissing_IDV.HeureArriveeSurSite) 
df_NoMissing_IDV.HeureEffective = pd.to_datetime(df_NoMissing_IDV.HeureEffective) 

同じ問題が残ります。

すべてのヘルプは〜

+0

を、私はあなたが列を変換する必要があると思います'datetime'に' - df_NoMissing_IDV.HeureArriveeSurSite = pdf.to_datetime(df_NoMissing_IDV.HeureArriveeSurSite) ' ' df_NoMissing_IDV.HeureEffective = pd.to_datetime(df_NoMissing_IDV.HeureEffective) ' – jezrael

+0

DataFrame =' df1'の列を 'datetime'に変換することを意味しますか? 'df_NoMissing_IDV'の列は既に' datetime'にあったからです。しかし、次のステップはまだ間違っています。 'df_NoMissing_IDV ['DureeService'] = df1 ['HeureEffective'] - df1 ['HeureArriveeSurSite']'、戻り値: 'ValueError:重複軸から再インデックスできません。 – ch36r5s

+0

Hmmm。いくつかの重複があります。エラーを返すサンプルを追加できますか? – jezrael

答えて

1

理解されるであろう、私は、エラーの原因は、あなたのデータにいくつかのdplicatesを持っているということだと思います。

二つのことを試してみてください:

df_NoMissing_IDV['DureeService'] = df1['HeureEffective'].values -df1['HeureArriveeSurSite'].values 

または:

df1 = df1.reset_index() 

EDIT: 何も試すことができますがtimedelta次のとおりです。

>>> import datetime 
>>> time_difference = df1['HeureEffective']-df1['HeureArriveeSurSite'] 
>>> time_difference_in_seconds = time_difference/timedelta(seconds=1) 
+0

最初のものが返されました: 'ValueError:値の長さがインデックスの長さと一致しません '。そして、2番目のものが返されました: 'ValueError:level_0は挿入できません、既に存在します。 ' – ch36r5s

+0

これを試してください:df1 = df1.reset_index(drop = True) –

+0

そして、この列は 'DataFrame''df1'に追加されます、それはそうなのでしょうか? – ch36r5s

関連する問題