2016-12-02 2 views
1

파이썬에서 팬더 데이터 프레임에 데이터를 추가하는 방법을 누군가가 알려줄 수 있습니까? 여러 스레드가 데이터를 데이터 프레임에 추가해야하는 기능을 사용하려고합니다 ...?여러 스레드에서 팬더 데이터 프레임

내 코드가 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

방금 ​​목록 조언을 듣고 모든 데이터를 목록에 추가 한 다음 마침내 판다 데이터 프레임으로 전송했고 완벽하게 작동했습니다. 고마워요 :) –