2017-12-26 2 views
0

필자는 행이 (이 열을 약간 조정 한 후에) 한 열의 값으로 일치시킬 수있는 두 개의 CSV를 가지고 있습니다. 매칭 후에 나는 그들로부터 떨어져서 새로운 값을 가져 와서 새로운 값을 얻고 싶다. 나는 그들 모두 csv.DictReader를 사용하여 간단한 스크립트를 생각하고 이중퍼지가있는 파이썬, 팬더

for row1 in csv1: 
for row2 in csv2: 
    if row1['someID'] == row2['someID]: 
     newdict = ... etc 

그러나, 1 개 파일은 900 만 행이고, 다른 하나는 50 만 행입니다. 그래서 내 코드는 4.5 * 10^12 반복이 걸립니다. 따라서 내 질문 : 그들을 일치시키는 빠른 방법은 무엇입니까? 중요 : 일치하는 'someID'는 csv 고유하지 않습니다. 매치마다 추가 행이 필요합니다. 따라서 'someID'가 csv1에서 두번 으로 나타나고 csv2에서 3 번 나타나면 최종 결과에서이 'someID'가있는 6 개의 행을 기대합니다.

+0

두 열의 someID가 고유합니까? – Tai

답변

0

시도해보기 : 반복하는 대신 두 파일 모두에서 pandas.read_csv()를 사용하고 someID에 병합하십시오. 예를 들어 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

:

import pandas as pd 
csv1 = pd.read_csv(path1) 
csv2 = pd.read_csv(path2) 
merged = csv1.merge(csv2, on='someID') 
merged['new_column'] = ... 

팬더 작업은 훨씬 빠르게 요소 수준에서 반복보다입니다 전체 NumPy와 배열을 통해입니다.

+0

답장을 보내 주셔서 감사합니다.하지만 문제는 csv1에 14k 개의 레코드가 있으며 csv2에는 14M 개의 레코드가 있습니다. – ramki