2016-12-02 48 views
1

有人可以告诉我一种方法来将数据添加到python中的数据框中,而多线程将使用一个函数,其中的数据必须附加到数据框中......?多个线程中的熊猫数据框

我的代码从URL中提取数据,然后我使用df.loc [index] ... 将废弃行添加到数据框中。

因为我已经开始了一个多线程,它基本上将每个URL分配给每个线程。 所以简而言之,许多页面一次被刮掉......

如何将这些行追加到数据框中?

回答

3

不建议将数据行逐个添加到数据框。我建议你在列表中构建数据,然后在最后组合这些列表,然后在完整的数据集上只调用一次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

我只是把你的列表建议,只是将所有的数据附加到列表中,然后最终转移到熊猫数据框,它完美地适合我的情况!非常感谢 :) –