【问题标题】:Reshape arrays for DataFrame为 DataFrame 重塑数组
【发布时间】:2021-09-01 10:58:14
【问题描述】:

我有三个形状为(6, 1) 的数组,我想创建一个包含数组值的三列的数据框,但是,我堆叠在整形上。我尝试了几种方法。我错过了什么?

代码sn-p:

array_1
Out:
array([[-1.05960895],
   [-1.02044895],
   [-1.14015499],
   [-1.4261115 ],
   [-1.86607347],
   [-1.02244409]])

array_2
Out:
array([[50.21621],
   [50.21565],
   [50.21692],
   [50.21636],
   [50.21763],
   [50.21707]])

array_3
Out:
array([[15.33107],
   [15.3293 ],
   [15.3309 ],
   [15.32913],
   [15.33073],
   [15.32896]])

arr = np.array([array_1, array_2, array_3]).reshape(3, 6)
​df = pd.DataFrame(data = arr, columns=['Sigma', 'x', 'y'])

ValueError: Shape of passed values is (3, 6), indices imply (3, 3)

【问题讨论】:

  • array_1 , array_2 , ... 是 (6,1) 以及如何在 3 列中插入 6 个元素

标签: python arrays pandas numpy


【解决方案1】:

请记住,np.reshape() 将重新排序您的数据并更改列中的值:

>>> arr = np.array([array_1, array_2, array_3]).reshape(6,3)
>>> pd.DataFrame(data = arr, columns=['Sigma', 'x', 'y'])
       Sigma          x          y
0  -1.059609  -1.020449  -1.140155
1  -1.426111  -1.866073  -1.022444
2  50.216210  50.215650  50.216920
3  50.216360  50.217630  50.217070
4  15.331070  15.329300  15.330900
5  15.329130  15.330730  15.328960

如果要保留值顺序,可以使用numpy.hstack

>>> pd.DataFrame(data=np.hstack((array_1,array_2,array_3)), columns=['Sigma', 'x', 'y'])
      Sigma         x         y
0 -1.059609  50.21621  15.33107
1 -1.020449  50.21565  15.32930
2 -1.140155  50.21692  15.33090
3 -1.426111  50.21636  15.32913
4 -1.866073  50.21763  15.33073
5 -1.022444  50.21707  15.32896

【讨论】:

    【解决方案2】:

    完整示例+解决方案:

    Create data:
    
    array_1 = np.array([[-1.05960895],
       [-1.02044895],
       [-1.14015499],
       [-1.4261115 ],
       [-1.86607347],
       [-1.02244409]])
    array_1 = [item for sublist in array_1 for item in sublist]
    
    array_2 = np.array([[50.21621],
       [50.21565],
       [50.21692],
       [50.21636],
       [50.21763],
       [50.21707]])
    array_2 = [item for sublist in array_2 for item in sublist]
    
    
    array_3 = np.array([[15.33107],
       [15.3293 ],
       [15.3309 ],
       [15.32913],
       [15.33073],
       [15.32896]])
    array_3 = [item for sublist in array_3 for item in sublist]
    
    
    # Solution:
    data = {'Sigma':array_1, 'x':array_2, 'y':array_3}
    df = pd.DataFrame(data = data, columns=['Sigma', 'x', 'y'])
    

    结果 df:

    【讨论】:

    • 您可以将array_1 = [item for sublist in array_1 for item in sublist] 替换为array_1 = list(array_1.flat) 以减少打字。但对于大数组,不建议这样做
    【解决方案3】:

    reshape(n_cols, n_rows)。你只是错误地传递了参数。

    # Assuming each array is a column in Dataframe.
    arr = np.array([array_1, array_2, array_3]).reshape(6, 3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      相关资源
      最近更新 更多