python - python pandas

时间:2016-09-05 13:24:13

标签: python datetime pandas dataframe

我有一个像这样的DataFrame: 此DataFrame称为df_NoMissing_IDV

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()数据。

这是一个名为DataFrame的新df1

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

df1看起来像这样:

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

由于它们都是datetime.datetime()数据,我尝试直接使用以下方法进行减法:

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'我该怎么办呢?

修改

我将df1中的列转换为datetime()

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

但下一步仍然是错误的:ValueError: cannot reindex from a duplicate axis

如果我将df_NoMissing_IDV中的列转换为datetime()

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

同样的问题仍然存在。

任何帮助将不胜感激〜

1 个答案:

答案 0 :(得分:1)

我认为错误的原因是您的数据中有一些重复。

尝试两件事:

pytz

或者:

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

修改 您还可以尝试df1 = df1.reset_index()

timedelta