簡體   English   中英

二維數組到 dataframe 列中的行

[英]2D array to rows in a dataframe column

我有一個 numpy.ndarray,如下所示:

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 中的每個列表都必須是 dataframe 中的一行。 我期待得到:

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

問題在於,由於a是一個多維的齊次數組,因此 pandas 不知道如何將其拆分為幾行。 一般來說 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

因此,您必須將數組轉換為可迭代的,其中每個值將是 dataframe 的一行 為此,您可以將 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM