将2d numpy数组分配给pandas DataFrame时出现意外行为

Liu*_*Sha 17 python numpy pandas

我有以下代码:

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

我希望它因为形状不匹配而抛出异常.但是熊猫默默地接受了这个任务:y第一列被分配给了x.

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

我尝试了pandas0.21和0.23.


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

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

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

由于赏金即将到期,我接受了最多的投票答案.但它没有提供上述问题的答案.

yog*_*gkm 6

值中的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
Run Code Online (Sandbox Code Playgroud)

也会工作,因为熊猫会丢弃额外的数据.如果您尝试传递较少的列,请说:

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

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