我的一个数据框列是日期。为了在我的分析中使用它,我将其转换为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方式使它工作?
答案 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