为了账号安全,请及时绑定邮箱和手机立即绑定

将 2d numpy 数组分配给 Pandas DataFrame 时的意外行为

将 2d numpy 数组分配给 Pandas DataFrame 时的意外行为

隔江千里 2021-06-07 17:16:45
我有以下代码:x = pd.DataFrame(np.zeros((4, 1)), columns=['A'])y = np.random.randn(4, 2)x['A'] = y我希望它会因为形状不匹配而引发异常。但熊猫默默地接受了赋值:y的第一列被赋值给x。这是故意的设计吗?如果是,背后的理由是什么?我尝试了pandas0.21 和 0.23。感谢那些试图提供帮助的人。然而,尽管赏金即将到期,但没有人给出满意的答案。让我强调一下预期的答案:这种设计是否有意为之?这是一个错误吗?是假设计吗?以这种方式设计它的理由是什么?由于赏金即将到期,我接受了投票最多的答案。但它没有提供上述问题的答案。
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-06-09
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

为了


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 那么 x 数据帧将与 y 矩阵复制。所以我想我们正在得到这种歧义,因为我们试图将数据框列与在 numpy 中创建的 matix 等同起来。希望能说明


查看完整回答
反对 回复 2021-06-09
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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



查看完整回答
反对 回复 2021-06-09
  • 3 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信