数据帧列中的行的二维数组

2024-05-29 03:34:27 发布

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

我有一份清单,如下所示:

x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
labels = [1,0]
df = pd.DataFrame({"a":x,"labels":labels})
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-458-79198b72cdcb> in <module>()
      1 x = np.array([[1, 2, 3], [4, 5, 6]], np.int32).reshape(-1,1)
      2 labels = [1,0,1,0]
----> 3 df = pd.DataFrame({"a":x,"labels":labels})

4 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/construction.py in sanitize_array(data, index, dtype, copy, raise_cast_failure)
    480     elif subarr.ndim > 1:
    481         if isinstance(data, np.ndarray):
--> 482             raise Exception("Data must be 1-dimensional")
    483         else:
    484             subarr = com.asarray_tuplesafe(data, dtype=dtype)

Exception: Data must be 1-dimensional

我试图通过x.reshape(-1,1)来重塑np.ndarray,但结果没有改变。ndarray x中的每个列表必须是数据帧中的一行。我希望得到:

           a  labels
0  [1, 2, 3]       1
1  [4, 5, 6]       0

Tags: indataframedfdatalabelsnpexceptionarray
1条回答
网友
1楼 · 发布于 2024-05-29 03:34:27

问题是,由于a是一个多维的、同质的数组,pandas不知道如何拆分为几行。一般来说,熊猫不支持嵌入式结构。 考虑一下高维数组为(3,4,2)的情况,应该如何处理

请注意,dataframe列是通过单独调用pd.Series构造函数创建的。通过直接尝试从ndarray构造一个序列,我们得到了相同的显式错误:

pd.Series(x)
    ...
    480     elif subarr.ndim > 1:
    481         if isinstance(data, np.ndarray):
 > 482             raise Exception("Data must be 1-dimensional")
    483         else:
    484             subarr = com.asarray_tuplesafe(data, dtype=dtype)
Exception: Data must be 1-dimensional

因此,您必须将数组转换为一个iterable,其中它的每个值都是数据帧的。 为此,您可以将numpy数组的值解压缩到单独的列表中:

df = pd.DataFrame({"a":[*x], "labels":labels}) # or .."a":list(x)..

print(df)
           a  labels
0  [1, 2, 3]       1
1  [4, 5, 6]       0

相关问题 更多 >

    热门问题