【问题标题】:pandas dataframe in multiple threads多线程中的熊猫数据框
【发布时间】:2016-12-02 18:49:21
【问题描述】:

谁能告诉我一种在 python 中将数据添加到 pandas 数据帧中的方法,而多个线程将使用一个函数,其中数据必须附加到数据帧中......?

我的代码从 URL 中抓取数据,然后我正在使用 df.loc[索引]... 将报废的行添加到数据框中。

自从我启动了一个多线程以来,它基本上将每个 URL 分配给每个线程。 所以简而言之,很多页面都被一次刮掉了......

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

【问题讨论】:

    标签: python multithreading pandas dataframe


    【解决方案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)
    

    【讨论】:

    • 谢谢您.. 这确实是一个想法。如何管理一种变通方法来索引每个列表?由于任何线程都可以随时生成任何列表名称。所以给一个索引开始,然后一个一个地增加它可能不是正确的选择......
    • 不确定你的意思。我发布了示例代码,以便我们可以更具体地讨论。当多处理时,我的理解是你不能保证结果返回的顺序......如果你想发布你的代码也可能有帮助。
    • 我只是听取了您的列表建议,并将所有数据附加到列表中,然后最终将其传输到 pandas 数据框,它非常适合我的情况!非常感谢:)
    猜你喜欢
    • 2016-09-15
    • 2017-03-20
    • 2021-10-05
    • 2017-03-10
    • 2021-05-27
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多