0
定製變壓器我下面的sklearn_pandas穿行在sklearn_pandas README on github發現,我試圖修改DateEncoder()定製變壓器爲例做2個額外的東西:其將日期,新列
- 轉換字符串類型的列以日期格式作爲參數時的日期時間
- 當吐出新列時附加原始列名稱。例如:如果輸入列:Date1則輸出:Date1_year,Date1_month,Date_1日。
這裏是我的嘗試(與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)
但在運行時,我收到以下錯誤:
AttributeError: Can only use .dt accessor with datetimelike values
爲什麼我收到這個錯誤和如何解決它? 任何幫助與上面提到的原始列重命名列名(Date1_year,Date1_month,Date_1天)將不勝感激!
您在'fit'中將'X'轉換爲'self.dt'處的日期時間,但'transform()'不能與'self.dt'一起使用。 'X.dt'因爲'X'不是datetime類型而失敗。 –