Ich versuche, Datenrahmen in Spalten zu binden und habe ein Problem mit pandas concat
, as ignore_index=True
scheint nicht zu funktionieren:
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 2, 3,4])
df2 = pd.DataFrame({'A1': ['A4', 'A5', 'A6', 'A7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D2': ['D4', 'D5', 'D6', 'D7']},
index=[ 5, 6, 7,3])
df1
# A B D
# 0 A0 B0 D0
# 2 A1 B1 D1
# 3 A2 B2 D2
# 4 A3 B3 D3
df2
# A1 C D2
# 5 A4 C4 D4
# 6 A5 C5 D5
# 7 A6 C6 D6
# 3 A7 C7 D7
dfs = [df1,df2]
df = pd.concat( dfs,axis=1,ignore_index=True)
print df
und das Ergebnis ist
0 1 2 3 4 5
0 A0 B0 D0 NaN NaN NaN
2 A1 B1 D1 NaN NaN NaN
3 A2 B2 D2 A7 C7 D7
4 A3 B3 D3 NaN NaN NaN
5 NaN NaN NaN A4 C4 D4
6 NaN NaN NaN A5 C5 D5
7 NaN NaN NaN A6 C6 D6
Auch wenn ich den Index mit zurücksetze
df1.reset_index()
df2.reset_index()
und dann versuche es
pd.concat([df1,df2],axis=1)
es erzeugt immer noch das gleiche Ergebnis!
Wenn ich Sie richtig verstanden habe, möchten Sie dies tun.
import pandas as pd
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 2, 3,4])
df2 = pd.DataFrame({'A1': ['A4', 'A5', 'A6', 'A7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D2': ['D4', 'D5', 'D6', 'D7']},
index=[ 4, 5, 6 ,7])
df1.reset_index(drop=True, inplace=True)
df2.reset_index(drop=True, inplace=True)
df = pd.concat( [df1, df2], axis=1)
Welches gibt:
A B D A1 C D2
0 A0 B0 D0 A4 C4 D4
1 A1 B1 D1 A5 C5 D5
2 A2 B2 D2 A6 C6 D6
3 A3 B3 D3 A7 C7 D7
Eigentlich hätte ich erwartet, dass df = pd.concat(dfs,axis=1,ignore_index=True)
das gleiche Ergebnis liefert.
Dies ist die hervorragende Erklärung von jreback:
ignore_index=True
"Ignoriert", dh nicht auf der Verbindungsachse ausgerichtet. es fügt sie einfach in der Reihenfolge zusammen, in der sie übergeben wurden, und weist dann einen Bereich für den tatsächlichen Index neu zu (z. B.range(len(index))
), sodass die Differenz zwischen dem Zusammenfügen bei nicht überlappenden Indizes (angenommenaxis=1
) Das Beispiel) ist, dass Sie mitignore_index=False
(der Standardeinstellung) das Concat der Indizes und mitignore_index=True
einen Bereich erhalten.
Die Option ignore_index funktioniert in Ihrem Beispiel. Sie müssen lediglich wissen, dass die Verkettungsachse ignoriert wird, bei der es sich in Ihrem Fall um die Spalten handelt. (Ein besserer Name wäre vielleicht ignore_labels.) Wenn die Verkettung die Indexbeschriftungen ignorieren soll, muss Ihre Achsenvariable auf 0 (Standard) gesetzt werden.
Stimmen Sie den Kommentaren zu, immer am besten, um die erwartete Ausgabe zu veröffentlichen.
Ist es das was du suchst?
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 2, 3,4])
df2 = pd.DataFrame({'A1': ['A4', 'A5', 'A6', 'A7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D2': ['D4', 'D5', 'D6', 'D7']},
index=[ 5, 6, 7,3])
df1 = df1.transpose().reset_index(drop=True).transpose()
df2 = df2.transpose().reset_index(drop=True).transpose()
dfs = [df1,df2]
df = pd.concat( dfs,axis=0,ignore_index=True)
print df
0 1 2
0 A0 B0 D0
1 A1 B1 D1
2 A2 B2 D2
3 A3 B3 D3
4 A4 C4 D4
5 A5 C5 D5
6 A6 C6 D6
7 A7 C7 D7
Danke für die Frage. Ich hatte das gleiche Problem. Aus irgendeinem Grund hilft "ignore_index = True" in meinem Fall nicht. Ich wollte den Index aus dem ersten Datensatz behalten und den zweiten Index ignorieren, was bei mir funktioniert hat
X_train=pd.concat([train_sp, X_train.reset_index(drop=True, inplace=True)], axis=1)