我有一个数据框,在周五晚上9点到周一凌晨0点之间总是丢失信息。我使用这些数据通过线性回归算法进行预测,因此 jump 会预测我的预测:
date timestamp liters next_liters
...
3442 2017-02-03 19:00:00 1486148400 0.86261 0.86354
3443 2017-02-03 20:00:00 1486152000 0.86354 0.86356
3444 2017-02-03 21:00:00 1486155600 0.86356 1.86330
3445 2017-02-06 00:00:00 1486339200 1.86330 1.86305
3446 2017-02-06 01:00:00 1486342800 1.86305 1.86321
3447 2017-02-06 02:00:00 1486346400 1.86321 1.86352
3448 2017-02-06 03:00:00 1486350000 1.86352 1.86311
3449 2017-02-06 04:00:00 1486353600 1.86311 1.86271
...
我想知道如何处理这个问题,因此在通过算法处理数据时,周五到周一不会被考虑在内。
我将这些值转换为NaN,但是,正如您所知,sklearn不允许这样的信息。
这是我目前的代码:
df = df[['date', 'epoch', 'liters']]
df['next_liters'] = df['liters'].shift(-1)
df.dropna(inplace=True)
X = np.array(df.drop(['next_liters'], 1))
X = preprocessing.scale(X)
y = np.array(df['next_liters'])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
clf = LinearRegression(fit_intercept=True, n_jobs=-1)
clf.fit(X_train, y_train)
print ("LinearRegression (" + str(clf.score(X_test, y_test)) + ")")
print (clf.predict(X_test))
答案 0 :(得分:0)
我们可以通过内置函数的pandas获取工作日,从中创建一个新列,过滤df以排除“saturday”和“sunday”,然后再次过滤以丢弃任何大于20:59:59的日期星期五。
这当然与ML无关,但只是一些与熊猫的索引。
df['weekday'] = df['date'].dt.dayofweek
df = df[(df['date'] <5)]
现在我们需要在周五晚上21:00:00(工作日= 4)过滤任何内容。我们可以通过抓住我们时间戳的小时来做到这一点(不是很优雅,但我需要重新制作一个新专栏,我敢肯定有更简洁的方法!)
def hr_func(ts):
return ts.hour
df['hour'] = df['date'].apply(hr_func)
df = df[(df['weekday'] !=4 ) | (df['hour'] <21)
df.head()
换句话说,如果不是星期五,请保留,如果是星期五但晚上9点之前,请保留它。
我很确定这应该有效!
http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing
“星期一= 0,星期日= 6”的星期几来自: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DatetimeIndex.weekday.html
和