【问题标题】:How to change list of tuples to numpy array?如何将元组列表更改为 numpy 数组?
【发布时间】:2018-02-01 17:03:25
【问题描述】:

我有一个如下的数据框:

  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) ]

【问题讨论】:

  • 这里的绝妙答案可能会对您有所帮助:stackoverflow.com/questions/28176949/…
  • 实际上,这些是数组,当它们打印在pd.DataFrame中时,它们看起来就像列表
  • 我的回答假设你想要一个 2D numpy 数组而不是 numpy 元组数组。

标签: python arrays pandas numpy dataframe


【解决方案1】:

如果你想要的是一个 numpy 元组数组,那么这就是你已经得到的:

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)

但是,如果您想将输出转换为二维数组而不是元组数组,请继续阅读。


选项 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 以获得您想要的输出。

【讨论】:

  • @juanpa.arrivillaga 哈哈哈是的。我最后一次重新启动是在提示读取 2k 的时候。会的。
  • @piRSquared 似曾相识? :p 哈哈,我想你知道我是从哪里捡来的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多