我正在进行预测建模
照常
将数据拆分为 x_train,x_test,y_train,y_test
,然后在 y_pred
中获得测试预测完成后,我想将数据放入 csv 文件
但是问题是当我尝试加入 y_pred 到 y_test 时,它没有按预期加入。
会得到这样的东西
Class Data TotalCnt 0
16 3 2209 5235
98 3 2190 4871
07 1 2183 1342 1690
09 1 2205 1540 1540
19 3 2191 4673
01 1 2206 3117 1005
38 3 2200 4837
44 3 2219 4965
04 1 2195 1340 1690
10 1 2191 1980 2002
38 3 2184 4620
15 3 2220 4781
18 3 2223 4872
它删除了一些记录
我认为问题的原因是
y_pred 是来自原始数据帧的随机集预测 所以看起来应该是这样
ID Prediction
16 1005
98 2056
07 1690
54 1690
...
.
.
.
y_pred 是一个数组,因此为了与 x_test 联接,我将其转换为数据框
一旦 y_pred 转换为数据框,它会丢失ID,因此会变成连续的1, 2, 3, 4, ...
ID Prediction
1 1005
2 2056
3 1690
4 1690
...
.
.
.
因此,当尝试使用x_test进行连接时,它仅与两个数据框中 x_test 和 y_pred
中存在的ID号匹配如何将预测作为数据框而不是数组
我正在使用这个
x_train, x_test, y_train, y_test = train_test_split(x,y)
rf = RandomForestRegressor(n_estimators=10000)
rf.fit(x_train, y_train)
y_pred = rf.predict(x_test)
. . .
. . .
def Lead0(value):
return "0" + str(value) if value < 10 else str(value)
dNow = datetime.datetime.now()
sNow = Lead0(dNow.year) + Lead0(dNow.month) + Lead0(dNow.day) + Lead0(dNow.hour) + Lead0(dNow.minute) + Lead0(dNow.second)
y_pred = pd.DataFrame(y_pred)
y_out = x_test
y_out = y_out.join(y_test)
y_out = y_out.join(y_pred)
y_out.to_csv(sFolder + "dfPred__" + sNow +".csv")
如何在不丢失ID顺序的情况下将数组连接到数据框
如何在不丢失ID顺序的情况下将数组转换为数据帧
答案 0 :(得分:0)
y_pred是对来自原始数据帧的随机集的预测 y_pred是一个数组
我了解您要保留原始数据框的索引
为此,我认为您需要将旧数据框索引设为一列,然后将旧数据框系列y_pred保留为dict或dataframe,而不是数组。
import pandas as pd
df = pd.DataFrame({'Record Type': ['100', '200', '300'],
'Value': [(1,2,3,4,5), '0,10', 1]})
Record Type Value
0 100 (1, 2, 3, 4, 5)
1 200 0,10
2 300 1
然后将索引重置为列:
df.reset_index(level=0, inplace=True)
index Record Type Value
0 0 100 (1, 2, 3, 4, 5)
1 1 200 0,10
2 2 300 1
现在,您可以保留旧数据框中的索引(现在是常规序列)和y_pred值,并将其与新数据框合并。
要将新df与旧df合并,请使用merge:
import pandas as pd
df1 = pd.DataFrame({'Record Type': ['100', '200', '300'],
'Value': [(1,2,3,4,5), '0,10', 1]})
df1.reset_index(level=0, inplace=True)
df2 = pd.DataFrame({'Record Type': ['100', '200', '300'],
'Value': [(1,2,3,4,5), '0,10', 1]})
df2.reset_index(level=0, inplace=True)
# to merge dataframes on column index
df_all = df1.merge(df2, on='index', indicator = True) #indicator show
# if record was found in one df or both
df_all.columns #show column list
df_all = df_all[['index','Record Type_y','Value_y']] #pick only columns you want