簡體   English   中英

將2d numpy數組分配給pandas DataFrame時出現意外行為

[英]Unexpected behavior in assigning 2d numpy array to pandas DataFrame

我有以下代碼:

x = pd.DataFrame(np.zeros((4, 1)), columns=['A'])
y = np.random.randn(4, 2)
x['A'] = y

我希望它因為形狀不匹配而拋出異常。 但是熊貓默默地接受了這個任務: y的第一列被分配給x

這是故意設計嗎? 如果是的話,背后的理由是什么?

我試過兩只pandas 0.21和0.23。


感謝那些試圖幫助的人。 然而,盡管賞金即將到期,但沒有人給出滿意的答案。

讓我強調一下預期的答案:

  1. 這個設計是否有意? 這是一個錯誤嗎? 這是一個錯誤的設計嗎?
  2. 以這種方式設計它的理由是什么?

由於賞金即將到期,我接受了最多的投票答案。 但它沒有提供上述問題的答案。

y中的值是未索引的矩陣。 情況x['A'] = y在這里工作,因為它從矩陣中取出第一個項目並將其分配給'A'

同樣的,

x = pd.DataFrame(np.zeros((4, 2)), columns=['A', 'B'])
y = np.random.randn(4, 2)
x[['A', 'B']] = y

也會工作,因為熊貓會丟棄額外的數據。 如果您嘗試傳遞較少的列,請說:

x = pd.DataFrame(np.zeros((4, 2)), columns=['A', 'B'])
y = np.random.randn(4, 1)
x[['A', 'B']] = y

這也將起作用,因為它將為兩個列分配相同的值。 這種情況類似於x['A'] = 0 ,它將用零替換A列中的所有數據。

對於

x = pd.DataFrame(np.zeros((4, 1)), columns=['A'])
y = np.random.randn(4, 2)

如果x ['A'] = y;則復制列,如果我們使用不同的列長度迭代它,例如:

x = pd.DataFrame(np.zeros((4, 3)), columns=['A','B','C'])
y = np.random.randn(4, 2)

並嘗試x ['A'] = y然后也復制第一列,但如果我們等於x = y,則用y矩陣復制x數據幀。 所以我想我們正在試圖將數據框列與numpy中創建的matix等同起來。 希望它解釋

Pandas系列是numpy數組,因為它的一列,它將它視為一個對象,引用已經改變。

>> import numpy as np
>>> x = np.zeros((4,1))
>>> x = np.random.randn(4,2)
>>> y= np.zeros((4,1))
>>> y
array([[0.],
       [0.],
       [0.],
       [0.]])
>>> x
array([[-1.00731291, -0.37151425],
       [-0.78154847, -0.72854126],
       [-0.98566253,  1.68786232],
       [ 0.12614892,  0.41804799]])
>>> y = x
>>>y
array([[-1.00731291, -0.37151425],
       [-0.78154847, -0.72854126],
       [-0.98566253,  1.68786232],
       [ 0.12614892,  0.41804799]])

暫無
暫無

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

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