3 votes

Comment ajouter nan à la fin d'un tableau en utilisant numpy

J'ai une liste de plusieurs tableaux et je veux qu'ils aient la même taille, en remplissant ceux avec moins d'éléments avec des nan. J'ai certains tableaux qui contiennent des entiers et d'autres qui contiennent des chaînes de caractères.

Par exemple:

a = ['Nike']
b = [1,5,10,15,20]
c = ['Adidas']
d = [150, 2]

J'ai essayé

max_len = max(len(a),len(b),len(c),len(d))

empty = np.empty(max_len - len(a))
a = np.asarray(a) + empty

empty = np.empty(max_len - len(b))
b = np.asarray(b) + empty

Je fais la même chose avec tous les tableaux, cependant une erreur se produit (TypeError: seuls des tableaux scalaires entiers peuvent être convertis en un index scalaire)

Je fais cela car je veux créer un DataFrame avec tous les tableaux étant des colonnes différentes.

Merci d'avance

3voto

yatu Points 39897

Je suggérerais d'utiliser lists puisque vous avez aussi des strings. Voici une manière d'utiliser zip_longest:

from itertools import zip_longest

a, b, c, d = map(list,(zip(*zip_longest(a,b,c,d, fillvalue=float('nan')))))

print(a)
# ['Nike', nan, nan, nan, nan]

print(b)
# [1, 5, 10, 15, 20]

print(c)
# ['Adidas', nan, nan, nan, nan]

print(d)
# [150, 2, nan, nan, nan]

Une autre approche pourrait être:

max_len = len(max([a,b,c,d], key=len))
a, b, c, d = [l+[float('nan')]*(max_len-len(l)) for l in [a,b,c,d]]

2voto

LocoGris Points 3991

Que diriez-vous de ceci ?

df1 = pd.DataFrame([a,b,c,d]).T

0voto

Erik Points 64

Vous devez utiliser le numpy.append(array, value, axis) pour ajouter un élément à un tableau. Dans votre exemple, cela serait ans = np.append(a, empty).

0voto

Anwarvic Points 993

Vous pouvez le faire directement comme ceci :

>>> import pandas as pd

>>> a = ['Nike']
>>> b = [1,5,10,15,20]
>>> c = ['Adidas']
>>> d = [150, 2]

>>> pd.DataFrame([a, b, c, d])
        0    1     2     3     4
0    Nike  NaN   NaN   NaN   NaN
1       1  5.0  10.0  15.0  20.0
2  Adidas  NaN   NaN   NaN   NaN
3     150  2.0   NaN   NaN   NaN

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