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?
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
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.
Sie treffen einen Fehler, weil das Argument end
in range(start, end)
nicht inklusive ist. Sie haben mehrere Möglichkeiten, dies zu berücksichtigen:
Verwenden Sie einfach df = pd.DataFrame(matrix)
. Der pd.DataFrame
-Konstruktor fügt implizit Integer-Indizes hinzu.
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))