2つのデータフレームを結合するにはどうすればよいですか?


105

Pandasデータフレームを使用しています。最初のデータフレームがありますD。次のようにして、2つのデータフレームを抽出します。

A = D[D.label == k]
B = D[D.label != k]

次に、ラベルを変更しAB

A.label = 1
B.label = -1

AとBを結合して、それらを1つのデータフレームとして、ユニオン演算のようなものにしたいと考えています。データの順序は重要ではありません。ただし、DからAとBをサンプリングすると、Dからのインデックスが保持されます。

回答:


148

あなたはこのappend方法を使うことができると思います

bigdata = data1.append(data2, ignore_index=True)

インデックスを保持するには、ignore_indexキーワードを使用しないでください...


1
これは機能します。ただし、新しいDataFrameが作成されます。インラインで行う方法はありますか?データベースから大量のデータをバッチでロードし、毎回コピーを作成せずにDataFrameを繰り返し更新できるようにする場合に適しています。
Andrew

1
はい、可能です。stackoverflow.com
a / 46661368/5717580

91

を使用することもできpd.concatます。これは、3つ以上のデータフレームを結合するときに特に役立ちます。

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)

これを使用したいのですが、同じ名前の2つの列を連結しようとしていますo_O
lifelonglearner

45

誰かが便利だと思った場合に備えて、ここにこれを追加すると思います。@ostrokachは、行間でデータフレームをマージする方法についてすでに説明しました。

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)

列間でマージするには、次の構文を使用できます。

df_col_merged = pd.concat([df_a, df_b], axis=1)

14

ビッグデータで作業していて、複数のデータセットを連結する必要がある場合の別の解決策があります。concatはパフォーマンスを集中的に使用できるため、毎回新しいdfを作成したくない場合は、代わりにリスト内包を使用できます。

frames = [ process_file(f) for f in dataset_files ]
result = pd.append(frames)

(セクションの下部にあるドキュメントここで指摘されているように):

:ただし、データの完全なコピーを作成することconcat(したがってappend)は、この関数を常に再利用すると、パフォーマンスに大きな影響を与える可能性があることに注意してください。複数のデータセットに対して操作を使用する必要がある場合は、リスト内包表記を使用してください。


2

最初のデータフレームdf1の値を2番目のデータフレームの値で更新/置換する場合df2。次の手順で実行できます—

手順1:最初のデータフレーム(df1)のインデックスを設定する

df1.set_index('id')

ステップ2: 2番目のデータフレームのインデックスを設定する(df2)

df2.set_index('id')

最後に、次のスニペットを使用してデータフレームを更新します—

df1.update(df2)

0

最初のdataFrame

train.shape

結果:-

(31962, 3)

2番目のdataFrame

test.shape

結果:-

(17197, 2)

組み合わせる

new_data=train.append(test,ignore_index=True)

小切手

new_data.shape

結果:-

(49159, 3)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.