使用 numpy 2D 数组包含一维列表的单列数据框

Ach*_*age 5 python numpy dataframe pandas

我想使用 2D numpy 数组创建一个新的单列 pandas 数据框。显然,每一行应该包含一维列表。以下是一个简化的可重现示例。

import pandas as pd
import numpy as np

arr = np.ones((4,3)) # could be any 2D array
Run Code Online (Sandbox Code Playgroud)

我想要的是,

       lists
0  [1, 1, 1]
1  [1, 1, 1]
2  [1, 1, 1]
3  [1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

现在,df = pd.DataFrame(arr, columns=['lists'])给出错误,

ValueError: Shape of passed values is (4, 3), indices imply (4, 1)
Run Code Online (Sandbox Code Playgroud)

df = pd.DataFrame(list(arr), columns=['lists'])给出错误,

ValueError: 1 columns passed, passed data had 3 columns
Run Code Online (Sandbox Code Playgroud)

最后,df = pd.DataFrame(arr.flatten(), columns=['lists'])给出一个错误的数据框,所有单元格都有一个标量1

我怎样才能得到我想要的东西?

Ans*_*hul 5

data = {"lists": list(arr)}

df = pd.DataFrame(data, columns=['lists'])

print(df)
Run Code Online (Sandbox Code Playgroud)

输出:

             lists
0  [1.0, 1.0, 1.0]
1  [1.0, 1.0, 1.0]
2  [1.0, 1.0, 1.0]
3  [1.0, 1.0, 1.0]
Run Code Online (Sandbox Code Playgroud)


Kar*_*tel 3

从 2d 数组(即 1d 数组)的每一行,构造一个包含该行的单例元组,并从该行构建 DataFrame 。我们可以使用生成器表达式优雅地做到这一点:

>>> df = pd.DataFrame(((x,) for x in arr), columns=['lists'])
>>> df
             lists
0  [1.0, 1.0, 1.0]
1  [1.0, 1.0, 1.0]
2  [1.0, 1.0, 1.0]
3  [1.0, 1.0, 1.0]
Run Code Online (Sandbox Code Playgroud)

构造函数迭代元组而不是底层数组,以确定给定行中的列值。有一个这样的值 - 一维数组 - 因此该行的值存储在单个可用列中。

单元格值确实是 Numpy 数组:

>>> df['lists'][0]
array([1., 1., 1.])
Run Code Online (Sandbox Code Playgroud)