[英]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.