[英]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。
感谢那些试图帮助的人。 然而,尽管赏金即将到期,但没有人给出满意的答案。
让我强调一下预期的答案:
由于赏金即将到期,我接受了最多的投票答案。 但它没有提供上述问题的答案。
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.