带有Python的VLOOKUP / ETL

我有一个来自MS SQL Server的数据。 查询中的数据直接从公共数据库返回一个名称列表。 例如,如果我想要名为“微波”的logging会发生这样的事情:

Microwave Microwvae Mycrowwave Microwavee 

微波将被拼写成数百种方式。 我现在用excel中的VLOOKUP来解决这个问题。 它查找左侧单元格的值,并返回右侧的值。 例如:

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

我只需将VLOOKUP公式复制到CSV或Excel文件中,然后将这些信息用于我的分析。

Python有没有办法以另一种方式解决这个问题?

可以做一个很长的if / elif列表,甚至是一个replace列表,并将其应用到csv的每一行,但这样做比使用VLOOKUP节省更多的时间。 有数以千计的公司名拼写错误,我没有更改数据库的许可。

所以堆栈,关于如何在这种情况下利用Python的任何想法?

如果你有这样的数据:

 +-------------+-----------+ | typo | word | +-------------+-----------+ | microweeve | microwave | | microweevil | microwave | | macroworv | microwave | | murkeywater | microwave | +-------------+-----------+ 

将其保存为typo_map.csv

然后运行(在同一个目录中):

 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'] 

这个结构稍微复杂得多,因为这个函数最初是为了查找多个列而编写的。 然而,它会为你工作,你可以自己简化它,如果你想。