14個のデータフレームと25万個以上の行を持つ14個のデータフレームがあります。 データフレームには同じ列ヘッダーがあり、データフレームを行ごとにマージしたいと考えています。私はデータフレームを「成長中の」DataFrameに連結しようとしましたが、それは数時間かかりました。効率的にパンダのデータフレームを行単位で結合する
基本的に、私は13回以下のようなものやっていた:
DF = pd.DataFrame()
for i in range(13):
DF = pd.concat([DF, subDF])
をstackoverflowの答えhereはリストにすべてのサブデータフレームを追加して、サブデータフレームのリストを連結示唆しています。このような何かやっように聞こえる
:
DF = pd.DataFrame()
lst = [subDF, subDF, subDF....subDF] #up to 13 times
for subDF in lst:
DF = pd.concat([DF, subDF])
は、彼らは同じものではありませんか?おそらく、私は提案されたワークフローを誤解しています。ここで私がテストしたものがあります。
import numpy
import pandas as pd
import timeit
def test1():
"make all subDF and then concatenate them"
numpy.random.seed(1)
subDF = pd.DataFrame(numpy.random.rand(1))
lst = [subDF, subDF, subDF]
DF = pd.DataFrame()
for subDF in lst:
DF = pd.concat([DF, subDF], axis=0,ignore_index=True)
def test2():
"add each subDF to the collecitng DF as you're making the subDF"
numpy.random.seed(1)
DF = pd.DataFrame()
for i in range(3):
subDF = pd.DataFrame(numpy.random.rand(1))
DF = pd.concat([DF, subDF], axis=0,ignore_index=True)
print('test1() takes {0} sec'.format(timeit.timeit(test1, number=1000)))
print('test2() takes {0} sec'.format(timeit.timeit(test2, number=1000)))
>> Output
test1() takes 12.732409087137057 sec
test2() takes 15.097430311612698 sec
私は、複数の大データフレーム行単位を連結するための効率的な方法でご提案をいただければ幸いです。ありがとう!
データを追加して1つのCSVにドロップしてから、そのCSVをDFとして読んでいると思いましたか?数時間かかるはずです。 – Merlin