微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Numpy 转换数据帧会给出错误的值

如何解决使用 Numpy 转换数据帧会给出错误的值

我有一个如下所示的数据框:

    Values  Class
0   0.018342    2
1   -0.461340   2
2   -0.461340   2
3   1.787317    2
4   1.896320    2
5   0.987067    2
6   1.923396    2
7   1.923396    2
8   1.640110    2
9   1.952998    2
10  3.961000    2
11  1.954717    2
12  1.954717    2
13  1.436860    2
14  1.649298    2
15  0.824585    0
16  -2.304908   0
17  -2.304908   0
18  0.853281    0
19  0.785227    0
20  -7.345420   0
21  -8.031817   0
22  -8.031817   0
23  -8.413029   0
24  -8.664868   0
25  2.448812    0
26  2.612488    0
27  2.612488    0
28  4.334718    0
29  0.554953    0

我想重塑这个数据框,使其看起来像:

      var1          var2       var3       class 
0    0.018342    0.987067    3.961000      2
1   -0.461340    1.923396    1.954717      2
2   -0.461340    1.923396    1.954717      2
3    1.787317    1.640110    1.436860      2
4    1.896320    1.952998    1.649298      2
5    0.824585   -7.345420    2.448812      0
6   -2.304908   -8.031817    2.612488      0
7   -2.304908   -8.031817    2.612488      0    
8    0.853281   -8.413029    4.334718      0    
9    0.785227   -8.664868    0.554953      0

我的代码如下:

new_results = []
Len_Var = 3 #Number of variables
print(df['Values'].values)
print(int(len(df['Values'].values)))
print(int(len(df['Values'].values)/Len_Var))
var_results = pd.DataFrame(np.reshape(df['Values'].values,(int(len(df['Values'].values)/Len_Var),Len_Var),order="F"))
var_classes= pd.DataFrame(np.reshape(df['Class'].values,(int(len(df['Class'].values)/Len_Var),Len_Var)))
var_results['target'] = var_classes[0].astype(str).astype(float).astype(int)
var_results = var_results.reset_index(drop=True)
new_result = var_results.rename(columns={0: "var1",1: "var2",2: "var3"},errors="raise")
new_results.append(new_result)
    
results = pd.concat(new_results)
results = results.reset_index()

然而,在检查结果行 5 到 9 时似乎有不同的值:

enter image description here

在重塑中一定有我遗漏的东西,但我无法弄清楚。

解决方法

试试这个,看看它是否适合你:

array = df.to_numpy()

left,right = array[:,0],array[:,-1]

data = pd.DataFrame(
    np.vstack(np.split(np.reshape(left,(-1,6),order="F"),2,1)),columns=["var1","var2","var3"],)

right = np.vstack(np.split(np.reshape(right,1))[:,0]
data.assign(target=right)


       var1        var2     var3    target
0   0.018342    0.987067    3.961000    2.0
1   -0.461340   1.923396    1.954717    2.0
2   -0.461340   1.923396    1.954717    2.0
3   1.787317    1.640110    1.436860    2.0
4   1.896320    1.952998    1.649298    2.0
5   0.824585    -7.345420   2.448812    0.0
6   -2.304908   -8.031817   2.612488    0.0
7   -2.304908   -8.031817   2.612488    0.0
8   0.853281    -8.413029   4.334718    0.0
9   0.785227    -8.664868   0.554953    0.0

如果你稍微玩弄一下,你可以获得一个更清晰的实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。