繁体   English   中英

模糊CSV列匹配

[英]Fuzzy CSV column matching

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

除了不断更改每个不同标头的row [value]之外,我正在用像这样的列结果更新字典。

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

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

我已经建立了一个类来测试将一个值与一个值列表匹配,但是我觉得这是我不需要自己写的东西。 不幸的是,我的google-fu没有返回任何信息。

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

据我所知,没有内置到pandas “模糊”匹配。 如果存在一些共同的分母,例如单词“ name”仅在包含候选人姓名的列中始终存在,则可以使用它来重命名name列。 例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM