【问题标题】:How to do a vlookup in python and use SQL's LIKE operator as input如何在 python 中进行 vlookup 并使用 SQL 的 LIKE 运算符作为输入
【发布时间】:2021-02-22 17:27:33
【问题描述】:

我有两个数据集,qlik_clean 和 synapse_clean。 Qlik_clean 包含 1 列字符串类型 (col= field), synapse_clean 包含 2 列 (cols= field, model),两者都是字符串类型。

我的目标是比较并找出 qlik_clean 中 col 字段的哪些行也在 synapse_clean 的 col 字段中,并返回 true 或该特定行的 col 模型的值。

我尝试过使用 pandas 和 lambda 函数,但没有成功。我已将 df 转换为 dict 并从那里开始,但也没有成功。

有人可以帮我指出正确的方向吗?我的代码在下面,我还没有添加任何比较逻辑,有人知道这里的路吗?

亲切的问候,

罗格

import pandas as pd import openpyxl import re

#open synapse fields file
synapsefilepath = ''
synapse = pd.read_excel(synapsefilepath, engine='openpyxl')
#create df from synapse file
synapse_df = pd.DataFrame(synapse)```

#transform fields into list
synapse_dict = synapse_df.to_dict('list')

#all keys and values to lower
synapse_clean = {k.lower(): str(v).lower() for k, v in synapse_dict.items()}


##### QLIK FILE #######
#open qlik file
qlikfilepath= ''
qlik = pd.read_excel(qlikfilepath, engine='openpyxl', sheet_name='qliksynapsecomp')
#create df from excel file and keep only qlikfieldname and insynapse
qlik_df = pd.DataFrame(qlik)
qlik_df_trunc = qlik_df[['field']]

#transform fields into list
qlik_dict = qlik_df_trunc.to_dict('list')

#lowercase all keys and values
qlik_clean = {ke.lower().strip(): str(va).lower().strip() for ke, va in qlik_dict.items()}

【问题讨论】:

    标签: python pandas dataframe vlookup string-comparison


    【解决方案1】:

    我无法从发布的代码中很好地了解您的数据框结构,但我认为这应该可以回答您的问题。

    通过 df2.col1 中的 df1.col1 中的值过滤 df1:

    df1[df1.col1.isin(df2.col1)]
    

    前;

    >>> df1
       A  B  C  D
    0  6  5  9  6
    1  4  1  6  3
    2  3  4  6  9
    3  0  6  0  5
    4  1  6  3  3
    >>> df2
       A  B  C  D
    0  6  4  5  4
    1  4  3  6  9
    2  2  2  8  5
    3  6  6  7  3
    4  7  0  1  7
    >>> df1[df1.A.isin(df2.A)]
       A  B  C  D
    0  6  5  9  6
    1  4  1  6  3
    

    您提到了一些关于 SQL LIKE 语句的内容,但也提到您没有使用字符串。如果我理解错了,您需要进行部分字符串匹配,请告诉我。

    【讨论】:

    • 该解决方案不使用文本进行部分模式匹配。尝试使用正则表达式进行模式匹配
    • 您好,感谢您花时间寻找答案!我很抱歉没有提供完整的信息。 Qlik_df 包含 1 个字符串类型的列,而 synapse_df 包含 2 个也是字符串类型的列。
    • 我对问题做了一些修改,希望现在更具体吗?
    • 添加一个包含文本的列 E,然后演示从一个数据帧到该列的另一个数据帧的部分模式匹配
    • @rutgerv 您能否发布一些您尝试匹配的文本示例?来自 df1 的字符串是否等于 df2 中的字符串,还是会成为 df2 中字符串的一部分? IE;匹配 'run' 和 'run' 或者 匹配 'run' 和 'run fast' ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    相关资源
    最近更新 更多