Je suis la sklearn_pandas marche à travers trouvé sur le sklearn_pandas README on github et essaie de modifier l'exemple du transformateur personnalisé DateEncoder() pour faire 2 choses supplémentaires:transformateur sur mesure qui divise les dates dans la nouvelle colonne
- Convertir des colonnes de type chaîne à date/heure tout en prenant le format de date en paramètre
- Ajoutez les noms de colonne d'origine lors du crachement des nouvelles colonnes. Par exemple: si colonne d'entrée: Date1 puis sorties: Date1_year, Date1_month, Date_1 jour.
Voici ma tentative (avec une compréhension assez rudimentaire des pipelines de sklearn):
import pandas as pd
import numpy as np
from sklearn.base import TransformerMixin, BaseEstimator
from sklearn_pandas import DataFrameMapper
class DateEncoder(TransformerMixin):
'''
Specify date format using python strftime formats
'''
def __init__(self, date_format='%Y-%m-%d'):
self.date_format = date_format
def fit(self, X, y=None):
self.dt = pd.to_datetime(X, format=self.date_format)
return self
def transform(self, X):
dt = X.dt
return pd.concat([dt.year, dt.month, dt.day], axis=1)
data = pd.DataFrame({'dates1': ['2001-12-20','2002-10-21','2003-08-22','2004-08-23',
'2004-07-20','2007-12-21','2006-12-22','2003-04-23'],
'dates2' : ['2012-12-20','2009-10-21','2016-08-22','2017-08-23',
'2014-07-20','2011-12-21','2014-12-22','2015-04-23']})
DATE_COLS = ['dates1', 'dates2']
Mapper = DataFrameMapper([(i, DateEncoder(date_format='%Y-%m-%d')) for i in DATE_COLS], input_df=True, df_out=True)
test = Mapper.fit_transform(data)
Mais l'exécution, je reçois l'erreur suivante:
AttributeError: Can only use .dt accessor with datetimelike values
Pourquoi est-ce que je reçois ce erreur et comment y remédier? De même, toute aide pour renommer les noms de colonnes comme mentionné ci-dessus avec les colonnes d'origine (Date1_year, Date1_month, Date_1 jour) serait grandement appréciée!
Vous convertissez 'X' en datetime à' self.dt' dans 'fit', mais' transform() 'ne fonctionne pas avec' self.dt'. 'X.dt' échoue parce que' X' n'est pas de type datetime. –