【问题标题】:Create flat ndarray from DataFrame column containing arrays [duplicate]从包含数组的 DataFrame 列创建平面 ndarray [重复]
【发布时间】:2019-05-14 23:23:40
【问题描述】:

我有一个包含 numpy 数组的列的 DataFrame:

df = pd.DataFrame({'Arrays': [np.array([1, 2, 3]), 
                           np.array([4, 5, 6]),
                           np.array([7, 8, 9])]})`

我需要以一种可以从中获取二维数组的方式提取数据。像这样:

array([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])`

但是df.values 会生成一个包含数组列表的数组:

array([[array([1, 2, 3])],
    [array([4, 5, 6])],
    [array([7, 8, 9])]], dtype=object)`

这类问题是否有操作符,还是我需要遍历所有条目?

【问题讨论】:

  • 你确定它是重复的@coldspeed 吗?您指出的问题是关于展平为一维数组,而 OP 明确提到了二维。
  • @ayorgo 是的,我确定。

标签: python arrays pandas numpy


【解决方案1】:

使用concatenateflatten 的组合从数组数组中获取单个扁平数组

np.concatenate(df.values.flatten()) 

替代方法是使用ravel

np.concatenate(df.values.ravel())  

示例

import pandas as pd
import numpy as np
df = pd.DataFrame({'Arrays': [np.array([1, 2, 3]), 
                               np.array([4, 5, 6]),
                               np.array([7, 8, 9])]})

np.concatenate(df.values.flatten())

# array([1, 2, 3, 4, 5, 6, 7, 8, 9])

最后,要得到一个二维数组,你可以简单地使用reshape as

np.reshape(flattened_array, (len(df),len(df)))

【讨论】:

  • 谢谢,这对我来说很好。
  • @MetalPesto:不客气。很高兴帮助:)
  • @MetalPesto:如果你不合时宜地想要一个二维数组,你现在可以使用np.reshape简单地重塑它
【解决方案2】:

除了

df.applymap(list).values.ravel()

你也可以

df.applymap(list).values.reshape((-1,))

给你

array([list([1, 2, 3]), list([4, 5, 6]), list([7, 8, 9])], dtype=object)

或者,否则

df.applymap(list)['Arrays'].tolist()

导致

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

【讨论】:

    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 2020-04-12
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多