2つの _pandas.DataFrames
_ を1つにまとめたいと思います。データフレームは同じ順序で同じ数の列を持ちますが、異なる言語の列見出しがあります。これらのデータフレームを効率的に結合するにはどうすればよいですか?
_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
_
これまでに思いついた唯一のアプローチは、列見出しの名前を変更してからpd.concat([df_ger, df_uk], axis=0, ignore_index=True)
を使用することです。しかし、より一般的なアプローチを見つけたいと思っています。
列が常に同じ順序である場合、機械的に rename
列を作成し、次のように append
を実行できます。
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
2つのデータフレームの構造が同じであることを確認できる場合、2つのオプションが表示されます。
選択したデフォルト言語(en_GBと仮定)のデータフレーム列名を保持し、それらを単にコピーします。
df_ger.columns = df_uk.columns
df_combined = pd.concat([df_ger, df_uk], axis=0, ignore_index=True)
これは、列名に関係なく機能します。ただし、技術的には名前を変更したままです。
Numpy.ndarraysを使用してデータフレームからデータを引き出し、それらをnumpyで連結し、再びデータフレームを作成します。
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"])
このソリューションはより多くのリソースを必要とするため、最初のソリューションを選択します。
これがあなたが思っていたよりも簡単かどうかはわかりませんが、主な目標が一般的なものである場合、これは1つの仮定でうまくいくはずです:たとえば、日付が最初の列である場合、2つのファイルの列は一致します翻訳バージョンも最初の列になります。
# 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