【问题标题】:Transforming A Dataframe Using Numpy is Giving Wrong Values使用 Numpy 转换数据框会给出错误的值
【发布时间】:2021-01-25 11:31:02
【问题描述】:

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

    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 行似乎具有不同的值:

在重塑中一定有什么我错过了,但我想不通。

【问题讨论】:

    标签: python-3.x pandas dataframe numpy reshape


    【解决方案1】:

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

    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, 6), order="F"), 2, 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      相关资源
      最近更新 更多