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']
이 구조는 약간 더 당신이 같은 데이터가
매핑이 있거나 매핑을 만들려고하십니까? 매핑이 없다면 levenshtein의 거리 알고리즘을 사용할 수 있습니다 : https://pypi.python.org/pypi/python-Levenshtein/0.12.0 –
@PaddyCollins 매핑이 있습니다. 8,000 가지 이상의 변형 및 계산 – MattR
매핑을 이미 갖고 있다면 무엇을 달성하려고합니까? SQL Server 매핑 테이블> Excel> ?? 여기에 파이썬이 들어 있나요? 어쩌면 한 걸음 뒤로 물러나서 당신이하려는 것을 설명하십시오. –