2016-07-27 56 views
3

我的一個數據框列是日期。爲了我的分析中使用它,我將其轉換爲日期時間如下:在sklearn.cross_validation.cross_val_score中使用python pandas時間戳

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

轉換這項工作:

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

然而,當我再使用它,sklearn.cross_validation.cross_val_score()拋出TypeError異常:

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()似乎不適用於時間戳,但我在分析中需要它。什麼是pythonic或pandastic的方式來使其工作?

+0

爲什麼你不能調用'cross_val_score時使用'datetime'列字符串() '? – MaxU

+0

@MaxU字符串返回相同的'TypeError' – Ana

+0

可以發佈以下輸出:'print(features.dtypes); print(labels.dtypes)' – MaxU

回答

0

試圖將my_dates列轉換成np.int64 D型,以使cross_val_score()快樂

演示:

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