簡體   English   中英

如何將元組列表更改為numpy數組?

[英]How to change list of tuples to numpy array?

我有一個數據框如下:

  id      points
0  1      (-2.3, 7)
1  1      (-5, 7)
2  1      (-6.9, 5)
3  2      (2, 5.9)
4  2      (-0.3, -8)

我正在嘗試使用groupby id並獲得如下所示的numpy 2darray:

df2 = df.groupby(["id"])["points"]\
          .apply(lambda x : np.array(x.values)).reset_index()

這有效,但它會更改為元組列表(如下所示),如何更改為numpy數組? 或者我正在考慮作為元組列表實際上是一個numpy二維數組?

  id   points
0  1   [ (-2.3, 7), (-5,7), (-6.9,5) ]
1  2   [ (2, 5.9), (-0.3, -8) ]

如果你想要的是一大堆元組,那就是你已經得到的:

In [8]: df.groupby('id').points.apply(np.asarray).values
Out[8]: 
array([array([(-2.3, 7), (-5, 7), (-6.9, 5)], dtype=object),
       array([(2, 5.9), (-0.3, -8)], dtype=object)], dtype=object)

但是,如果要將輸出轉換為2D數組而不是元組數組,請繼續閱讀。


選項1

在groupby之前轉換points (您可以在沒有lambda情況下進行管理):

In [785]: df.points = df.points.apply(np.array); df
Out[785]: 
   id        points
0   1   [-2.3, 7.0]
1   1       [-5, 7]
2   1   [-6.9, 5.0]
3   2    [2.0, 5.9]
4   2  [-0.3, -8.0]

In [787]: df.groupby('id').points.apply(np.asarray)
Out[787]: 
id
1    [[-2.3, 7.0], [-5, 7], [-6.9, 5.0]]
2             [[2.0, 5.9], [-0.3, -8.0]]

選項2

在groupby之后轉換points (你需要一個lambda ):

In [796]: df.groupby('id').points.apply(lambda x: np.array(list(map(list, x))))
Out[796]: 
id
1    [[-2.3, 7.0], [-5.0, 7.0], [-6.9, 5.0]]
2                 [[2.0, 5.9], [-0.3, -8.0]]

完成后,調用df.reset_index以獲得所需的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM