簡體   English   中英

在sklearn.cross_validation.cross_val_score中使用python pandas時間戳

[英]Using python pandas timestamps in sklearn.cross_validation.cross_val_score

我的一個數據幀列是日期。 為了在我的分析中使用它,我將其轉換為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方式使其工作?

嘗試將my_dates列轉換為np.int64 ,以使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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM