wake-up-neo.com

Konvertieren Sie ein numpy-Array in einen Pandas-Datenrahmen

Ich habe ein numpy Array von Größe 31x36 und ich möchte in Pandas Dataframe umwandeln, um es zu verarbeiten. Ich versuche es mit folgendem Code zu konvertieren:

pd.DataFrame(data=matrix,
          index=np.array(range(1, 31)),
          columns=np.array(range(1, 36)))

Ich erhalte jedoch die folgende Fehlermeldung:

ValueError: Form der übergebenen Werte ist (36, 31), Indizes implizieren (35, 30)

Wie kann ich das Problem lösen und richtig umsetzen?

5
konstantin

Der Grund für das, was Sie versucht haben, ist fehlgeschlagen

pd.DataFrame(data=matrix,
          index=np.array(range(1, 32)),
          columns=np.array(range(1, 37)))

Da der letzte Wert nicht im Bereich enthalten ist

Schauen Sie sich an, was Sie gerade gemacht haben:

pd.DataFrame(data=matrix,
          index=np.arange(1, 32)),
          columns=np.arange(1, 37)))

Oder in reiner pandas:

pd.DataFrame(data=matrix,
          index=pd.RangeIndex(range(1, 32)),
          columns=pd.RangeIndex(range(1, 37)))

Wenn Sie den Index und die Spaltenparameter nicht angeben, werden ein automatisch generierter Index und Spalten erstellt, die mit 0 beginnen. Unklar, warum Sie sie benötigen, um mit 1 zu beginnen

Sie hätten auch die Index- und Spaltenparameter nicht übergeben und nach der Erstellung einfach ändern können:

In[9]:
df = pd.DataFrame(adaption)
df.columns = df.columns+1
df.index = df.index + 1
df

Out[9]: 
          1         2         3         4         5         6
1 -2.219072 -1.637188  0.497752 -1.486244  1.702908  0.331697
2 -0.586996  0.040052  1.021568  0.783492 -1.263685 -0.192921
3 -0.605922  0.856685 -0.592779 -0.584826  1.196066  0.724332
4 -0.226160 -0.734373 -0.849138  0.776883 -0.160852  0.403073
5 -0.081573 -1.805827 -0.755215 -0.324553 -0.150827 -0.102148
4
EdChum

Zusätzlich zur obigen Antwort beschreibt range(1, X) die Menge von Nummern von 1 bis einschließlich X-1. Sie müssen range(1, 32) und range(1, 37) verwenden, um das zu tun, was Sie beschreiben.

1
ACascarino

Sie treffen einen Fehler, weil das Argument end in range(start, end) nicht inklusive ist. Sie haben mehrere Möglichkeiten, dies zu berücksichtigen:

Index und Spalten nicht übergeben

Verwenden Sie einfach df = pd.DataFrame(matrix). Der pd.DataFrame-Konstruktor fügt implizit Integer-Indizes hinzu.

Pass in der Form des Arrays

matrix.shape gibt einen Tupel an Zeilen- und Spaltenanzahl an, sodass Sie sie nicht manuell angeben müssen. Zum Beispiel:

df = pd.DataFrame(matrix, index=range(matrix.shape[0]),
                          columns=range(matrix.shape[1]))

Wenn Sie bei 1 anfangen müssen, müssen Sie 1 hinzufügen:

df = pd.DataFrame(matrix, index=range(1, matrix.shape[0] + 1),
                          columns=range(1, matrix.shape[1] + 1))
1
jpp