代码之家  ›  专栏  ›  技术社区  ›  doraemon

向数据帧分配2d numpy数组时出现意外行为

  •  17
  • doraemon  · 技术社区  · 7 年前

    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。


    谢谢那些试图帮忙的人。然而,没有人给出一个令人满意的答案,虽然赏金即将到期。


    既然赏金即将到期,我接受了投票最多的答案。但它并没有回答上述问题。

    3 回复  |  直到 7 年前
        1
  •  6
  •   yogkm    7 年前

    中的值 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 带零。

        2
  •  0
  •   Abhishek Kumar    7 年前

    对于

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

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

    尝试x['A']=y,然后第一列也被复制,但是如果我们等于x=y,那么x数据帧被y矩阵复制。 希望能解释

        3
  •  0
  •   Eliethesaiyan    7 年前

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