簡體   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