繁体   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