包含使用 numpy 二维数组的一维列表的单列数据帧



我想使用 2D numpy 数组创建一个新的单列熊猫数据帧。显然,每行都应包含 1D 列表。下面是一个简化的可重现示例。

import pandas as pd
import numpy as np
arr = np.ones((4,3)) # could be any 2D array

我想要的是,

lists
0  [1, 1, 1]
1  [1, 1, 1]
2  [1, 1, 1]
3  [1, 1, 1]

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

ValueError: Shape of passed values is (4, 3), indices imply (4, 1)

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

ValueError: 1 columns passed, passed data had 3 columns

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

我如何得到我想要的?

data = {"lists": list(arr)}
df = pd.DataFrame(data, columns=['lists'])
print(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]

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

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

构造函数循环访问元组,而不是基础数组,以确定给定行中的列值。有一个这样的值 - 1d 数组 - 因此该值存储在单个可用列中。

单元格值确实是 Numpy 数组:

>>> df['lists'][0]
array([1., 1., 1.])

获取数组的所有行,用它们创建数据帧。转置然后添加列名。

import pandas as pd
import numpy as np
# ones array
arr = np.ones((4,3), dtype=int)
# get all rows of the array transpose and add column name
df  = pd.DataFrame([list(arr)]).T
df.columns = ['lists']
df

最新更新