从包含数组的数据帧列创建平面数组

2024-03-28 12:31:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这类问题是否有一个运算符,或者我是否需要循环所有条目?你知道吗


Tags: 数据numpydataframedf列表objectnp方式
2条回答

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

最后,要得到一个2d数组,只需使用reshape作为

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

除了

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

相关问题 更多 >