290 votes

(ValueError): une erreur s'est produite en définissant un élément de tableau avec une séquence

Pourquoi les échantillons de code suivants donnent-ils tous l'erreur suivante?

np.array([[1, 2], [2, 3, 4]])

np.array([1.2, "abc"], dtype=float)

tous donnent l'erreur suivante?

ValueError: setting an array element with a sequence.

2voto

Max Kleiner Points 39

Dans mon cas, le problème était avec un nuage de points d'un dataframe X[]:

ax.scatter(X[:,0],X[:,1],c=colors,    
       cmap=CMAP, edgecolor='k', s=40)  #c=y[:,0],

#ValueError: setting an array element with a sequence.
#Fix with .toarray():
colors = 'br'
y = label_binarize(y, classes=['Irrelevant','Relevant'])
ax.scatter(X[:,0].toarray(),X[:,1].toarray(),c=colors,   
       cmap=CMAP, edgecolor='k', s=40)

1voto

xiong cai Points 1

Lorsque la forme n'est pas régulière ou que les éléments ont des types de données différents, l'argument dtype passé à np.array ne peut être que object.

import numpy as np

# arr1 = np.array([[10, 20.], [30], [40]], dtype=np.float32)  # erreur
arr2 = np.array([[10, 20.], [30], [40]])  # OK, et le dtype est object
arr3 = np.array([[10, 20.], 'hello'])     # OK, et le dtype est aussi object

``

1voto

questionto42 Points 1372

Dans mon cas, j'avais une liste imbriquée en tant que série que je voulais utiliser en entrée.

Première vérification : Si

df['nestedList'][0]

renvoie une liste comme [1,2,3], vous avez une liste imbriquée.

Ensuite, vérifiez si vous obtenez toujours l'erreur en passant à l'entrée df['nestedList'][0].

Ensuite, votre prochaine étape est probablement de concaténer toutes les listes imbriquées en une liste non imbriquée, en utilisant

[item for sublist in df['nestedList'] for item in sublist]

Cette aplatissement de la liste imbriquée est emprunté à How to make a flat list out of list of lists?.

0voto

Neda Zand Points 1

L'erreur est due au fait que l'argument dtype de la fonction np.array spécifie le type de données des éléments dans le tableau, et il ne peut être défini que sur un seul type de données qui est compatible avec tous les éléments. La valeur "abc" n'est pas un flottant valide, donc essayer de le convertir en flottant entraîne une ValueError. Pour éviter cette erreur, vous pouvez soit supprimer l'élément de type chaîne de la liste, soit choisir un type de données différent qui peut gérer à la fois les valeurs flottantes et les valeurs de chaîne, comme object.

numpy.array([1.2, "abc"], dtype=object)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X