在sklearn.cross_validation.cross_val_score中使用python pandas时间戳

时间:2016-07-27 07:02:31

标签: python pandas timestamp scikit-learn

我的一个数据框列是日期。为了在我的分析中使用它,我将其转换为datetime,如下所示:

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方式使它工作?

1 个答案:

答案 0 :(得分:0)

尝试将my_dates列转换为np.int64 dtype,以使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