2017-08-06 2 views
0

私は10のDataFramesと同じ数の行を持ち、それぞれ固有の列を持ちます(データフレーム間で共有されません)。私は、最終的なデータフレームにすべてのデータフレームに含まれるすべての列が含まれるように、データフレームを直列に追加するだけです。最終データフレームの最初の行には、最初の行の最初の行が続き、2番目の行の最初の行が続き、10番目のデータフレームまで続きます。私はpandas.concat(dataframes、axis = 1)を試しましたが、何とかして数値データにNaN値を作成しました。非常に遅くて醜いメソッドを記述して、インデックスごとに行を増やし、行ごとに最終データフレームを作成することで、私はそれを取り組みました。これを行う正しいパンダの方法は何ですか?Pandas DataFramesを効率的に連結します

+0

データフレームの行数が異なっているので、それがあります。あなたは私にDataFramesの形を教えてくれますか? – Wonjin

+0

すべてのデータフレームを同じように再インデックスし、 'pd.merge'または' pd.concat'を呼び出す必要があります。 –

+0

@ウォンジン・ノー、彼らはすべて同じ数の行を持っていると言っていたからです。 – YungGun

答えて

1

すべてのデータフレームがリストdf_listであると仮定すると:

df0_index = df_list[0].index # get the first data frame's index 

for i in range(1, len(df_list)): 
    df_list[i] = df_list[i].set_index(df0_index) # reindex all the other dataframes 

df_out = pd.concat(df_list, axis=1) # concatenate 
+1

私はこれを8時間前に知りたいと思っています。私はインデックスの理解を深める必要があります。ありがとうございました。 – YungGun

+0

ねえ、申し訳ありませんが、実際に試してみましたが、うまくいきません。私はまだ説明できないほどNaN値を取得しています。この時点では私にはうんざりしているけど、問題はパンダだと思うし、自分のコードではないと思う。 – YungGun

+0

@YungGunあなたが受け入れられないのは残念です...問題がパンダにある場合。とにかく私はいくつかの例を作成しようとします。 –

1

それが働いて手に入れました。 pandas.concat()を呼び出すときに単に "ignore_index"をtrueに設定しなければなりません。

pd.concat(df_list, axis=1, ignore_index=True) # returns dataframes correctly. 

何らかの理由でインデックスの再インデックスが機能しないことに注意してください。

1

あなたはリスト内包でこれを行うことができます:

pd.concat([df.reset_index(drop=True) for df in df_list], axis = 1) 
関連する問題