猿问

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

我有以下代码:


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

y = np.random.randn(4, 2)

x['A'] = y

我希望它会因为形状不匹配而引发异常。但熊猫默默地接受了赋值:y的第一列被赋值给x。


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


我尝试了pandas0.21 和 0.23。


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


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


这种设计是否有意为之?这是一个错误吗?是假设计吗?

以这种方式设计它的理由是什么?

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


隔江千里
浏览 168回答 3
3回答

浮云间

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

一只斗牛犬

Pandas 系列是 numpy 数组,因为它是一列,所以将其视为一个对象,引用已更改。>> import numpy as np>>> x = np.zeros((4,1))>>> x = np.random.randn(4,2)>>> y= np.zeros((4,1))>>> yarray([[0.],       [0.],       [0.],       [0.]])>>> xarray([[-1.00731291, -0.37151425],       [-0.78154847, -0.72854126],       [-0.98566253,  1.68786232],       [ 0.12614892,  0.41804799]])>>> y = x>>>yarray([[-1.00731291, -0.37151425],       [-0.78154847, -0.72854126],       [-0.98566253,  1.68786232],       [ 0.12614892,  0.41804799]])
随时随地看视频慕课网APP

相关分类

Python
我要回答