模糊CSV列匹配

时间:2014-08-15 03:09:32

标签: python csv

我现在正在解析很多.csv个文件,而且我遇到了一个问题,其中一个.csv会识别出一个名称为a的列使用标题candidate_name竞选办公室的候选人,而另一个将使用CANDIDATE_FULL_NAME

我正在使用这样的列结果更新字典,除了不断更改每个不同标题的行[value]。

dict.update({
    'candidate': row['column_header']

有没有办法模糊匹配这个?最好我可以使用的东西几乎可以使用,这样我就不必设置一个类/方法,正则表达式测试每列的相似性。

我已经设置了一个类来测试将值与值列表进行匹配,但我觉得这就是我不能自己写的东西。不幸的是,我的google-fu没有返回任何内容。

我使用了列号,但遗憾的是列并不总是以相同的顺序排列。另外,我无法更改原始的.csv文件(否则我 肯定会对其进行规范化)。

1 个答案:

答案 0 :(得分:1)

不"模糊"据我所知,匹配内置于pandas。如果有一些共同点,例如这个词"名称"只有并且始终在包含候选人姓名的列中,您可以使用它来重命名名称列。例如:

import pandas as pd
import numpy as np

def fuzzymatch(df, string, stname):

    for col in df.columns:
        if col.lower().find(string) > -1:
            df.rename(columns={col:stname}, inplace=True)
            break

    return df

df = pd.DataFrame({"CANDIDATE_NAME_HERE": ["Ted","Fred","Sally","John","Jane"], "B": [20, 30, 10, 40, 50], "C": [32, 234, 23, 23, 42523]})
#pd.read_csv('filename.csv') will load your csv file

string = 'name'
stname = 'candidate_name'

df = fuzzymatch(df, string, stname)
print(df)

    B      C candidate_name
0  20     32            Ted
1  30    234           Fred
2  10     23          Sally
3  40     23           John
4  50  42523           Jane