J'ai le code suivant:
x = pd.DataFrame(np.zeros((4, 1)), columns=['A'])
y = np.random.randn(4, 2)
x['A'] = y
Je m'attends à ce qu'il jette une exception en raison de l'inadéquation des formes. Mais les pandas ont accepté la tâche en silence: la première colonne de y
est affectée à x
.
Est-ce une conception intentionnelle? Si oui, quelle est la raison derrière?
J'ai essayé les deux pandas
0.21 et 0.23.
Merci pour ceux qui ont essayé d'aider. Cependant, personne ne donne une réponse satisfaisante bien que la prime expire.
Permettez-moi de souligner ce qui est attendu comme réponse:
Comme la prime va expirer, j'ai accepté la réponse la plus votée. Mais cela ne répond pas aux questions ci-dessus.
Les valeurs dans y
sont des matrices non indexées. Le cas x['A'] = y
fonctionne ici car il prend le premier élément de la matrice et l'assigne au 'A'
.
De même,
x = pd.DataFrame(np.zeros((4, 2)), columns=['A', 'B'])
y = np.random.randn(4, 2)
x[['A', 'B']] = y
cela fonctionnera également car les données supplémentaires sont supprimées par les pandas ... Si vous essayez de passer moins de colonnes, dites:
x = pd.DataFrame(np.zeros((4, 2)), columns=['A', 'B'])
y = np.random.randn(4, 1)
x[['A', 'B']] = y
Cela fonctionnera également car il affectera les mêmes valeurs aux deux colonnes. Ce cas est similaire à x['A'] = 0
qui remplacera toutes les données de la colonne A
par des zéros.
pour
x = pd.DataFrame(np.zeros((4, 1)), columns=['A'])
y = np.random.randn(4, 2)
si x ['A'] = y; alors la colonne est répliquée et si nous l'itérons avec différentes longueurs de colonne telles que:
x = pd.DataFrame(np.zeros((4, 3)), columns=['A','B','C'])
y = np.random.randn(4, 2)
et essayez x ['A'] = y, la première colonne est également répliquée, mais si nous égalons x = y, le bloc de données x est répliqué avec la matrice y. Donc, je suppose que nous obtenons cette ambiguïté alors que nous essayons d'assimiler une colonne de trame de données à un matix créé dans numpy . J'espère que cela explique
Les séries de pandas sont des tableaux numpy. Depuis sa colonne, il le traite comme un objet unique, auquel la référence a changé.
>> 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]])