2016-09-28 5 views
0

MS SQL Server에서 가져온 데이터가 있습니다. 쿼리의 데이터는 공용 데이터베이스에서 직접 이름 목록을 반환합니다.Python을 사용하는 VLOOKUP/ETL

Microwave 
Microwvae 
Mycrowwave 
Microwavee 

마이크로 웨이브는 수백 가지 철자가 될 것이다 : 예를 들어, 경우 내가 일어날 것 같은 "마이크로 웨이브"뭔가의 이름으로 기록을 원했다. 나는 이것을 Excel에서 VLOOKUP으로 해결한다. 왼쪽 셀의 값을 찾고 오른쪽 값을 반환합니다. 예를 들면 :

VLOOKUP(A1,$A$1,$B$4,2,False) 
Table: 
    A    B 
1 Microwave Microwave 
2 Microwvae Microwave 
3 Mycrowwave Microwave 
4 Microwavee Microwave 

은 그냥 CSV 또는 Excel 파일 다운 VLOOKUP 수식을 복사 한 다음 내 분석을 위해 해당 정보를 사용할 수 있습니다.

다른 방법으로이 문제를 해결할 수있는 방법이 있습니까? 긴// elif 목록 또는 바꾸기 목록을 만들어 CSV의 각 줄에 적용해도 VLOOKUP을 사용하는 것보다 시간을 절약 할 수 있습니다. 잘못 입력 한 회사 이름은 수천 가지이며 데이터베이스를 변경할 수있는 여유가 없습니다.

그래서 스택,이 시나리오에서 파이썬을 활용하는 방법에 대한 아이디어가 있습니까? (같은 디렉토리에) typo_map.csv

그것을 저장
+-------------+-----------+ 
| typo  | word | 
+-------------+-----------+ 
| microweeve | microwave | 
| microweevil | microwave | 
| macroworv | microwave | 
| murkeywater | microwave | 
+-------------+-----------+ 

그런 다음 실행합니다 :

import csv 

def OpenToDict(path, index): 
    with open(path, 'rb') as f: 
     reader=csv.reader(f) 
     headings = reader.next() 
     heading_nums={} 
     for i, v in enumerate(headings): 
      heading_nums[v]=i 
     fields = [heading for heading in headings if heading <> index] 
     file_dictionary = {} 
     for row in reader: 
      file_dictionary[row[heading_nums[index]]]={} 
      for field in fields: 
       file_dictionary[row[heading_nums[index]]][field]=row[heading_nums[field]] 
    return file_dictionary 


map = OpenToDict('typo_map.csv', 'typo') 

print map['microweevil']['word'] 

이 구조는 약간 더 당신이 같은 데이터가

+0

매핑이 있거나 매핑을 만들려고하십니까? 매핑이 없다면 levenshtein의 거리 알고리즘을 사용할 수 있습니다 : https://pypi.python.org/pypi/python-Levenshtein/0.12.0 –

+0

@PaddyCollins 매핑이 있습니다. 8,000 가지 이상의 변형 및 계산 – MattR

+0

매핑을 이미 갖고 있다면 무엇을 달성하려고합니까? SQL Server 매핑 테이블> Excel> ?? 여기에 파이썬이 들어 있나요? 어쩌면 한 걸음 뒤로 물러나서 당신이하려는 것을 설명하십시오. –

답변

1

이 있다면 이 함수는 원래 두 개 이상의 열을 조회하기 위해 작성 되었기 때문에 상황에 따라 달라야합니다. 그러나, 그것은 당신을 위해 작동하고, 당신이 원한다면 당신은 당신 자신을 단순화 할 수 있습니다.