2017-04-07 11 views
1

我正在使用sklearn的FunctionTransformer來預處理一些我的數據,它們是日期字符串,如「2015-01-01 11:09:15」。在字符串數據中使用sklearn的FunctionTransformer?

我的自定義函數需要一個字符串作爲輸入,但我發現FunctionTransformer無法處理字符串,因爲它沒有實現fit_transform的源代碼。因此,呼叫被路由到父類爲:

 57  def fit(self, X, y=None): 
    58   if self.validate: 
---> 59    check_array(X, self.accept_sparse) 
    60   return self 

check_array似乎只適用於數字ndarrays。當然,我現在可以在熊貓領域做所有事情,但我想知道是否有更好的方法來處理這個問題 - 特別是。考慮到我將來可能會使用管線?

謝謝!

+0

你不能將日期時間字符串先轉換爲'datetime64' dtype嗎?例如'df ['date'] = pd.to_datetime(df ['date'])'那麼它將是數字 – EdChum

+0

謝謝。沒有意識到該方法存在。但我仍然想知道如何正確使用FunctionTransformer來做到這一點 - 比如我想在自定義函數中做一些額外的操作。 – peidaqi

+0

嘿,我知道這是舊的,但沒有privilidge尚未評論:) 下面爲你工作? –

回答

0

看來,如果validate參數是你在找什麼: http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.FunctionTransformer.html

這裏一個例子,它可能是有意義的過度轉換爲浮動在註釋中把它作爲一個字符串。比方說,你想要的時區信息添加到您的日期字符串:

import pandas as pd 

def add_TZ(df): 
    df['date'] = df['date'].astype(str) + "Z" 

data = { 'date' : ["2015-01-01 11:00:00", "2015-01-01 11:15:00", "2015-01-01 11:30:00"], 
     'value' : [4., 3., 2.]} 

df = pd.DataFrame(data) 

正如你指出,由於檢查這將失敗:

ft = FunctionTransformer(func=add_TZ) 
ft.fit_transform(df) 

輸出:

ValueError: could not convert string to float: '2015-01-01 11:30:00' 

該作品:

ft = FunctionTransformer(func=add_TZ, validate=False) 
ft.fit_transform(df) 

輸出:

date     value 
0 2015-01-01 11:00:00Z 4.0 
1 2015-01-01 11:15:00Z 3.0 
2 2015-01-01 11:30:00Z 2.0 
相關問題