从包含数组的DataFrame列中创建平面ndarray

时间:2018-12-13 17:17:39

标签: python arrays pandas numpy

我有一个带有包含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)`

是否存在针对此类问题的运算符,或者我需要遍历所有条目吗?

2 个答案:

答案 0 :(得分:3)

使用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用作

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

答案 1 :(得分:0)

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