Mam listę wielu tablic i chcę, aby miały ten sam rozmiar, wypełniając te z mniejszą liczbą elementów za pomocą nan. Mam kilka tablic zawierających liczby całkowite i inne, które mają ciąg.

Na przykład:

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

Próbowałem

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

Robię to samo ze wszystkimi tablicami, jednak pojawia się błąd (TypeError: tylko całkowite tablice skalarne można przekonwertować na indeks skalarny)

Robię to, ponieważ chcę utworzyć ramkę DataFrame z wszystkimi tablicami będącymi różnymi kolumnami.

Dziękuję z góry

2
Mariana 20 listopad 2019, 16:31

4 odpowiedzi

Proponuję użyć lists, ponieważ masz również strings. Oto jeden sposób korzystania z 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]

Innym podejściem może być:

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]]
3
yatu 20 listopad 2019, 16:45

Co powiesz na to?

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

2
LocoGris 20 listopad 2019, 16:38

Powinieneś użyć numpy.append(array, value, axis), aby dołączyć do tablicy. W Twoim przykładzie byłoby to ans = np.append(a,empty).

0
Erik 20 listopad 2019, 16:37

Możesz to zrobić bezpośrednio w ten sposób:

>>> 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
0
Anwarvic 20 listopad 2019, 16:38