首页 > 解决方案 > pandas str.contains 匹配不使用正则表达式 boudry 的确切子字符串

问题描述

我有两个数据帧,并试图找到一种方法来匹配从一个数据帧到另一个数据帧的确切子字符串。

第一个数据框

import pandas as pd
import numpy as np

random_data = {'Place Name':['TS~HOT_MD~h_PB~progra_VV~gogl', 'FM~uiosv_PB~emo_SZ~1x1_TG~bhv'], 
              'Site':['DV360', 'Adikteev']}
        
dataframe = pd.DataFrame(random_data)
print(dataframe)

第二个数据框

test_data = {'code name': ['PB', 'PB', 'PB'], 
             'Actual':['programmatic me', 'emoteev', 'programmatic-mechanics'],
             'code':['progra', 'emo', 'prog']}

test_dataframe = pd.DataFrame(test_data)

方法

for k, l, m in zip(test_dataframe.iloc[:, 0], test_dataframe.iloc[:, 1], test_dataframe.iloc[:, 2]):
    dataframe['Site'] = np.select([dataframe['Place Name'].str.contains(r'\b{}~{}\b'.format(k, m), regex=False)], [l],
                                  default=dataframe['Site'])

当前输出如下,但我希望匹配确切的子字符串,这不适用于上面的代码。

电流输出:

Place Name                        Site
TS~HOT_MD~h_PB~progra_VV~gogl     programmatic-mechanics
FM~uiosv_PB~emo_SZ~1x1_TG~bhv     emoteev

预期输出:

Place Name                        Site
TS~HOT_MD~h_PB~progra_VV~gogl     programmatic me
FM~uiosv_PB~emo_SZ~1x1_TG~bhv     emoteev

标签: pythonpandasnumpy

解决方案


数据

import pandas as pd
 import numpy as np
 random_data = {'Place Name':['TS~HOT_MD~h_PB~progra_VV~gogl',
                                     'FM~uiosv_PB~emo_SZ~1x1_TG~bhv'], 'Site':['DV360', 'Adikteev']}
    dataframe = pd.DataFrame(random_data)

    test_data = {'code name': ['PB', 'PB', 'PB'], 'Actual':['programmatic me', 'emoteev', 'programmatic-mechanics'],
                 'code':['progra', 'emo', 'prog']}
    test_dataframe  = pd.DataFrame(test_data)

test_datframe code将and映射Actual到字典中keyvalue分别为 and

keys=test_dataframe['code'].values.tolist()

dicto=dict(zip(test_dataframe.code, test_dataframe.Actual))
dicto

加入由|分隔的键 启用任一短语的搜索

k = '|'.join(r"{}".format(x) for x in dicto.keys())
k

从 datframe 中提取符合 k 中任何短语的字符串并将它们映射到字典

dataframe['Site'] = dataframe['Place Name'].str.extract('('+ k + ')', expand=False).map(dicto)
dataframe

输出

在此处输入图像描述


推荐阅读