如何检查两列之间的字符匹配?

2024-06-28 16:18:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列,我想检查它们是否在4个或更多字符之间匹配,而不管数组的位置如何,如果它们匹配,则创建一个匹配的列,如果它匹配,则为OK,否则为KO。你知道吗

如何在PYTHON或sqllite中实现这一点?你知道吗

示例:

数据集

Street 1;Street 2
ASENSIO Y TOLEDO 15;AVILA 9
AVILA 9;AVILA 9
FISTERRA S/N;FINISTERRE S/N - SAN ROQUE
PASEO DEL PUER;PASEO DEL PUERTO SN
PASEO DEL PUER;PASEO DEL PUERTO SN
LA UNION 2;LA UNION 2
ALEGRIA 14;LA UNION 2

谢谢你。你知道吗

https://i.stack.imgur.com/gYLcg.png

代码:

def dataet():
df_dataset= pd.read_csv("C:/Users/Documents/DATASET2.CSV", sep=';')

print(df_dataset.columns.values)
query = """
        SELECT INSTR(street 1, street 2)
        FROM df_dataset
    """

result= pdsql.sqldf(query)
print(result)

Tags: streetdfresultquerydatasetlaprintunion
2条回答

在python中,可以使用set获取字符串中的唯一字符,然后使用&集合从Street 1Street 2获取它们的并集。我也在从匹配列表中删除空格,你不想数一数,对吧?你知道吗

df['count'] = ['OK' if len(set(x) & set(y) - set(' ')) >= 4 else 'KO' for x, y in zip(df['Street 1'].fillna(''), df['Street 2'].fillna(''))]

print(df)

输出:

              Street 1                    Street 2 count
0  ASENSIO Y TOLEDO 15                     AVILA 9    KO
1              AVILA 9                     AVILA 9    OK
2         FISTERRA S/N  FINISTERRE S/N - SAN ROQUE    OK
3       PASEO DEL PUER         PASEO DEL PUERTO SN    OK
4       PASEO DEL PUER         PASEO DEL PUERTO SN    OK
5           LA UNION 2                  LA UNION 2    OK
6           ALEGRIA 14                  LA UNION 2    KO

更新:如果要查找Street 1Street 2之间最长公共子串的长度:

from difflib import SequenceMatcher

z = df.fillna('')
z['count'] = [len(x[m.a:m.a+m.size].replace(' ', '')) for x, m in
     [(x, SequenceMatcher(None, x, y).find_longest_match(0, len(x), 0, len(y)))
     for x, y in zip(z['Street 1'], z['Street 2'])]]

z['match'] = ['OK' if x >= 4 else 'KO' for x in z['count']]

print(z)

输出:

              Street 1                    Street 2  count match
0  ASENSIO Y TOLEDO 15                     AVILA 9      1    KO
1              AVILA 9                     AVILA 9      6    OK
2         FISTERRA S/N  FINISTERRE S/N - SAN ROQUE      6    OK
3       PASEO DEL PUER         PASEO DEL PUERTO SN     12    OK
4       PASEO DEL PUER         PASEO DEL PUERTO SN     12    OK
5           LA UNION 2                  LA UNION 2      8    OK
6           ALEGRIA 14                  LA UNION 2      1    KO
7     JARILLO 7 BO IZD                SAN AMBROSIO      1    KO
8     STREET AVE PARRA              PARRA STREET 4      6    OK
9              PARRA 4                                  0    KO

同时使用努比。哪里():

df['res'] = np.where([len(set(x) - set(y))>=4 for x, y in zip(df['Street 1'], df['Street 2'])], 'OK', 'KO')

相关问题 更多 >