将2d numpy数组指定给数据帧时出现意外行为

我有以下代码:

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

我希望它会抛出一个异常,因为形状不匹配。但是熊猫默默地接受了分配:y的第一列被分配给x

这是故意设计的吗?如果是,背后的理由是什么

我尝试了pandas0.21和0.23


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

让我强调一下预期的答案:

  1. 此设计是否有意?是虫子吗?这是一个错误的设计吗?
  2. 以这种方式设计它的理由是什么?

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

y中的值是未索引的矩阵。案例x['A']=y在这里起作用,因为它从矩阵中获取第一项并将其分配给'A'

同样地

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

也会起作用,因为额外的数据被熊猫丢弃了。
如果您试图传递更少的列,请说:

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

这也将起作用,因为它将为两列指定相同的值。这种情况类似于x['A']=0,它将用零替换列A中的所有数据

发表评论