Ich habe zwei pandas.DataFrames
, die ich zu einer kombinieren möchte. Die Datenrahmen haben die gleiche Anzahl von Spalten in der gleichen Reihenfolge, aber Spaltenüberschriften in verschiedenen Sprachen. Wie kann ich diese Datenrahmen effizient kombinieren?
df_ger
index Datum Zahl1 Zahl2
0 1-1-17 1 2
1 2-1-17 3 4
df_uk
index Date No1 No2
0 1-1-17 5 6
1 2-1-17 7 8
desired output
index Datum Zahl1 Zahl2
0 1-1-17 1 2
1 2-1-17 3 4
2 1-1-17 5 6
3 2-1-17 7 8
Der einzige Ansatz, den ich bisher gefunden habe, ist, die Spaltenüberschriften umzubenennen und dann pd.concat([df_ger, df_uk], axis=0, ignore_index=True)
zu verwenden. Ich hoffe jedoch, einen allgemeineren Ansatz zu finden.
Wenn die Spalten immer in der gleichen Reihenfolge sind, können Sie die Spalten mechanisch rename
und das do an append
wie folgt ausführen:
new_cols = {x: y for x, y in Zip(df_uk.columns, df_ger.columns)}
df_out = df_ger.append(df_uk.rename(columns=new_cols))
df_ger = pd.read_fwf(StringIO(
u"""
index Datum Zahl1 Zahl2
0 1-1-17 1 2
1 2-1-17 3 4"""),
header=1).set_index('index')
df_uk = pd.read_fwf(StringIO(
u"""
index Date No1 No2
0 1-1-17 5 6
1 2-1-17 7 8"""),
header=1).set_index('index')
print(df_uk)
print(df_ger)
new_cols = {x: y for x, y in Zip(df_uk.columns, df_ger.columns)}
df_out = df_ger.append(df_uk.rename(columns=new_cols))
print(df_out)
Date No1 No2
index
0 1-1-17 5 6
1 2-1-17 7 8
Datum Zahl1 Zahl2
index
0 1-1-17 1 2
1 2-1-17 3 4
Datum Zahl1 Zahl2
index
0 1-1-17 1 2
1 2-1-17 3 4
0 1-1-17 5 6
1 2-1-17 7 8
Vorausgesetzt, Sie können sicher sein, dass die Strukturen der beiden Datenrahmen gleich bleiben, sehe ich zwei Optionen:
Behalten Sie die Namen der DataFrame-Spalten der ausgewählten Standardsprache bei (ich gehe von en_GB aus) und kopieren Sie sie einfach über:
df_ger.columns = df_uk.columns
df_combined = pd.concat([df_ger, df_uk], axis=0, ignore_index=True)
Dies funktioniert unabhängig von den Spaltennamen. Technisch bleibt es jedoch beim Umbenennen.
Ziehen Sie die Daten mit numpy.ndarrays aus dem Datenframe, verknüpfen Sie sie mit numpy und erstellen Sie erneut einen Datenframe:
np_ger_data = df_ger.as_matrix()
np_uk_data = df_uk.as_matrix()
np_combined_data = numpy.concatenate([np_ger_data, np_uk_data], axis=0)
df_combined = pd.DataFrame(np_combined_data, columns=["Date", "No1", "No2"])
Diese Lösung erfordert mehr Ressourcen, daher würde ich mich für die erste entscheiden.
Ich bin nicht sicher, ob dies einfacher sein wird, als Sie es sich vorgestellt haben, aber wenn das Hauptziel etwas Allgemeines ist, sollte dies mit einer Annahme in Ordnung sein: Die Spalten in den beiden Dateien stimmen beispielsweise überein, wenn Datum die erste Spalte ist. Die übersetzte Version wird auch die erste Spalte sein.
# number of columns
n_columns = len(df_ger.columns)
# save final columns names
columns = df_uk.columns
# rename both columns to numbers
df_ger.columns = range(n_columns)
df_uk.columns = range(n_columns)
# concat columns
df_out = pd.concat([df_ger, df_uk], axis=0, ignore_index=True)
# rename columns in new dataframe
df_out.columns = columns