web-dev-qa-db-fra.com

Datetime dans les pandas dataframe ne se soustraira pas

J'essaie de trouver la différence de temps entre deux colonnes dans un cadre de données de pandas, au format datetime.

Vous trouverez ci-dessous certaines des données de mon cadre de données et le code que j'ai utilisé. J'ai vérifié trois fois que ces deux colonnes dtypes sont datetime64.

Mes données:

date_updated                  date_scored 
2016-03-30 08:00:00.000       2016-03-30 08:00:57.416  
2016-04-07 23:50:00.000       2016-04-07 23:50:12.036 

Mon code:

data['date_updated'] = pd.to_datetime(data['date_updated'], 
format='%Y-%m-%d %H:%M:%S')
data['date_scored'] = pd.to_datetime(data['date_scored'], 
format='%Y-%m-%d %H:%M:%S')
data['Diff'] =  data['date_updated'] - data['date_scored']

Le message d'erreur que je reçois:

TypeError: data type "datetime" not understood

Toute aide serait appréciée Merci!

Mon solution de contournement:

for i in raw_data[:10]:
scored = i.date_scored
scored_date =  pd.to_datetime(scored, format='%Y-%m-%d %H:%M:%S')
if type(scored_date) == "NoneType":
    pass
Elif scored_date.year >= 2016:
    extracted = i.date_extracted
    extracted =  pd.to_datetime(extracted, format='%Y-%m-%d %H:%M:%S')
    bank = i.bank.name
    diff = scored - extracted
    datum = [str(bank), str(extracted), str(scored), str(diff)]
    data.append(datum)
else:
    pass
9
Graham Streich

J'ai rencontré la même erreur en utilisant la syntaxe ci-dessus (travaillé sur une autre machine cependant):

data['Diff'] =  data['date_updated'] - data['date_scored']

Cela a fonctionné sur ma nouvelle machine avec:

data['Diff'] =  data['date_updated'].subtract(data['date_scored'])
16
ac2001

Vous devez mettre à jour les pandas ... Je viens de rencontrer le même problème avec un ancien code qui fonctionnait sans problème. Après la mise à jour des pandas (0.18.1-np111py35_0) vers une version plus récente (0.20.2-np113py35_0), le problème a été résolu.

1
Roberto Valerio

Il fonctionne comme un charme. Vous pouvez même simplifier votre code puisque to_datetime est suffisamment intelligent pour en deviner le format.

import io
import pandas as pd
# Paste the text by using of triple-quotes to span String literals on multiple lines
zz = """date_updated,date_scored
2016-03-30 08:00:00.000,       2016-03-30 08:00:57.416  
2016-04-07 23:50:00.000,       2016-04-07 23:50:12.036"""

data = pd.read_table(io.StringIO(zz), delim_whitespace=False, delimiter=',')

data['date_updated'] = pd.to_datetime(data['date_updated'])
data['date_scored'] = pd.to_datetime(data['date_scored'])
data['Diff'] =  data['date_updated'] - data['date_scored']

print(data)
#          date_updated             date_scored                     Diff
# 0 2016-03-30 08:00:00 2016-03-30 08:00:57.416 -1 days +23:59:02.584000
# 1 2016-04-07 23:50:00 2016-04-07 23:50:12.036 -1 days +23:59:47.964000
1
Romain