2016-07-27 2 views
3

私のデータフレーム列の1つは日付です。 、私はさらにそれを使用する場合、しかしsklearn.cross_validation.cross_val_scoreでのpython pandasタイムスタンプの使用

print df['my_dates'].dtype 
datetime64[ns] 

sklearn.cross_validation.cross_val_score()TypeError例外をスロー:

datetime_columns = ['my_dates'] 
for c in datetime_columns: 
    df[c] = pd.to_datetime(df[c], infer_datetime_format=False) 

変換が仕事をしていません:私はdatetime型に変換し、私の分析で使用するためには、次のように

features = df[list(feature_columns)] # Includes 'my_dates' 
labels = df[list(target_columns)] 
cross_val_score(LinearRegression(), features.values, labels.values, cv=5) 

TypeError: float() argument must be a string or a number 

すべて私の他の列(my_datesなし)数値形式を持っています。

print list((set(features.dtypes).union(set(labels.dtypes)))) 
[dtype('int8'), dtype('int64'), dtype('float64')] 

このエラーは、 'my_dates'列が機能に含まれている場合にのみ発生します。 cross_val_score()はタイムスタンプでは動作しないようですが、私の分析ではそれが必要です。それを機能させるにはどうしたのですか?

+0

を) '? – MaxU

+0

@MaxU stringは、同じTypeErrorを返します。 – Ana

+0

次の出力をポストすることができます: 'print(features.dtypes); print(labels.dtypes) ' – MaxU

答えて

0

cross_val_score()幸せ

デモ作るためにnp.int64 DTYPEにあなたのmy_dates列を変換しよう: `cross_val_scoreを(呼び出すときに文字列としてあなた` datetime`列を使用できない理由

In [330]: df = pd.DataFrame({'my_dates':pd.date_range('2001-01-01', periods=10, freq='55555T')}) 

In [331]: df 
Out[331]: 
      my_dates 
0 2001-01-01 00:00:00 
1 2001-02-08 13:55:00 
2 2001-03-19 03:50:00 
3 2001-04-26 17:45:00 
4 2001-06-04 07:40:00 
5 2001-07-12 21:35:00 
6 2001-08-20 11:30:00 
7 2001-09-28 01:25:00 
8 2001-11-05 15:20:00 
9 2001-12-14 05:15:00 


In [333]: df.my_dates.astype(np.int64) // 10**9 
Out[333]: 
0  978307200 
1  981640500 
2  984973800 
3  988307100 
4  991640400 
5  994973700 
6  998307000 
7 1001640300 
8 1004973600 
9 1008306900 
Name: my_dates, dtype: int64 
関連する問題