2016-12-02 20 views
1

複数のスレッドがデータフレームにデータを追加する必要がある機能を使用している間に、pandasデータフレームをPythonに追加する方法を教えてもらえますか?複数のスレッドのpandasデータフレーム

私のコードはURLからデータをスクレープしてから、私は df.loc [index] ... を使用して、廃棄された行をデータフレームに追加していました。

私は基本的に各スレッドに各URLを割り当てるマルチスレッドを開始しました。 したがって、すぐに多くのページが一度に掻き取られています...

どのようにこれらの行をデータフレームに追加しますか?

答えて

3

データフレームに行を1つずつ追加することはお勧めしません。私はあなたのリストにあなたのデータを構築し、最後にそれらのリストを結合し、DataFrameのコンストラクタを一度だけ完全なデータセットの最後に呼び出してみることをお勧めします。

例:

# help from http://stackoverflow.com/a/28463266/3393459 
# and http://stackoverflow.com/a/2846697/3393459 


from multiprocessing.dummy import Pool as ThreadPool 
import requests 
import pandas as pd 


pool = ThreadPool(4) 

# called by each thread 
def get_web_data(url): 
    return {'col1': 'something', 'request_data': requests.get(url).text} 


urls = ["http://google.com", "http://yahoo.com"] 
results = pool.map(get_web_data, urls) 


print results 
print pd.DataFrame(results) 
+0

は、それは確かにアイデアだ...ありがとう。 回避方法を管理して各リストのインデックスを作成するにはどうすればよいですか?どのスレッドも任意の時点で任意のリスト名を生成できるためです。ですから、まずインデックスを与えてからそれを一つずつ増やしてください。正しい選択ではないかもしれません... –

+1

あなたは何を意味するのかよく分かりません。私は具体的に話すことができるようにサンプルコードを投稿しました。マルチプロセッシングの場合、私の理解では、結果が戻ってくる順序を保証することはできません。あなたのコードを投稿したい場合は、役に立つかもしれません。 – exp1orer

+1

私はあなたのリストのアドバイスを受け取り、すべてのデータをリストに追加した後、最終的にpandasデータフレームに転送しました。どうもありがとう :) –

関連する問題