私は、read_csvを使用して、2つのデータフレームをパンダでマージしようとしています。しかし、私のデータフレーム(この例ではd1
)はコンピュータが扱うには大きすぎるので、私はread_csv
にiterator
引数を使用しています。パンダで繰り返しデータフレームをマージする
のは、私は、各行がそれぞれの人のためのすべてのデータをキャプチャし、そうするのと同等となるようにそれらをマージする必要がある2つのデータフレーム
d1 = pd.DataFrame({
"col1":[1,2,3,4,5,6,7,8,9],
"col2": [5,4,3,2,5,43,2,5,6],
"col3": [10,10,10,10,10,4,10,10,10]},
index=["paul", "peter", "lauren", "dave", "bill", "steve", "old-man", "bob", "tim"])
d2 = pd.DataFrame({
"yes/no": [1,0,1,0,1,1,1,0,0]},
index=["paul", "peter", "lauren", "dave", "bill", "steve", "old-man", "bob", "tim"])
を持っているとしましょう:
pd.concat((d1,d2), axis=1,join="outer")
が、私はできるので、 d1をメモリにフィットさせるために、私はread_csv
を使用していました(私は既に巨大なファイルを処理して.csv形式で保存していますので、test.csv
というファイルにデータフレームd1が入っていると思います)。
itera = pd.read_csv("test.csv",index_col="index",iterator=True,chunksize=2)
しかし、私は
for i in itera:
d2 = pd.concat((d2,i), axis=1,join="outer")
私の出力が第二データフレームによって付加される最初のデータフレームで行います。
私の出力は次のようになります。
col1 col2 col3 yes/no
one NaN NaN NaN 1.0
two NaN NaN NaN 0.0
three NaN NaN NaN 1.0
four NaN NaN NaN 0.0
five NaN NaN NaN 1.0
six NaN NaN NaN 1.0
seven NaN NaN NaN 1.0
eight NaN NaN NaN 0.0
nine NaN NaN NaN 0.0
one 1.0 5.0 10.0 NaN
two 2.0 4.0 10.0 NaN
three 3.0 3.0 10.0 NaN
four 4.0 2.0 10.0 NaN
five 5.0 5.0 10.0 NaN
six 6.0 43.0 4.0 NaN
seven 7.0 2.0 10.0 NaN
eight 8.0 5.0 10.0 NaN
nine 9.0 6.0 10.0 NaN
は私の質問は理にかなって願っています:)
速い答え:それはメモリに収まらない大きなデータフレームを処理することができ、DASKライブラリを使用しよう:http://dask.pydata.org/en/latest/ – CrazyElf
*私の出力は、2番目のデータフレームによって追加された最初のデータフレームです。* ...何を望みましたか? – Parfait
ネストされた連結を試してください: 'pd.concat([d1、pd.concat(itera、ignore_index = True)])' – Parfait