匹配Pandas系列obj字符串中的精确子字符串

2024-06-16 17:34:18 发布

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

我试图匹配pandas数据帧序列字符串中的确切子字符串,但不知何故str.contains似乎在这里不起作用。我看到了文档,它说要应用regex=False,这也不起作用。有人能提出解决办法吗?你知道吗

输出:

 Creative Name Revised Targeting Type
0  ff~tg~conbhv             contextual
1  ff~tg~conbhv             contextual
2     ff~tg~con             contextual  

预期产量:

Creative Name Revised Targeting Type
0  ff~tg~conbhv             contextual + behavioral
1  ff~tg~conbhv             contextual + behavioral
2     ff~tg~con             contextual

方法:

import pandas as pd
import numpy as np


column = {'col_name': ['Revised Targeting Type']}

data = {"Creative Name":["ff~pd~q4-smartphones-note10-pdp-iphone7_mk~gb_ch~social_md~h_ad~ss1x1_dt~cross_fm~spost_pb~fcbk_sz~1x1_rt~cpm_tg~conbhv_sa~lo_vv~ia_it~soc_ts~lo-iphone7_ff~ukp q4 smartphones ukc q4 - smartphones - static ukt lo-iphone7 ukcdj buy_ct~fb_cs~1x1_lg~engb_cv~ge_ce~loc_mg~oth_ta~lrn_cw~na",
                         "ff~tg~conbhv",
                         "ff~tg~con"], "Revised Targeting Type":["ABC", "NA", "NA"]}

mapping = {"Code": ['con', 'conbhv'], "Actual": ['contextual', 'contextual + behavioral'], "OtherPV": [np.nan, np.nan],
           "SheetName": ['tg', 'tg']}

# Creating a dataFrame
dataframe_data = pd.DataFrame(data)
mapping_data = pd.DataFrame(mapping)
column_data = pd.DataFrame(column)

print(dataframe_data)

print(mapping_data)

print(column_data)

# loop through Dataframe column avilable in (column_data) dataframe
for i in column_data.iloc[:,0]:
    print(i)
    # loop through mapping dataframe (mapping_data)
    for k, l, m in zip(mapping_data.iloc[:, 0], mapping_data.iloc[:, 1], mapping_data.iloc[:, 3]):
        # mask the dataframe (dataframe_date)
        mask_null_revised_new_col = (dataframe_data['{}'.format(i)].isin(['NA']))
       #apply dataframe values in main dataframe (dataframe_data)
        dataframe_data['{}'.format(i)] = np.select([mask_null_revised_new_col &
                                                    dataframe_data['Creative Name'].str.contains('{}~{}'.format(m, k))],
                                                   [l], default=dataframe_data['{}'.format(i)])

print(dataframe_data)

Creative Name Revised Targeting Type
0  ff~tg~conbhv             contextual
1  ff~tg~conbhv             contextual
2     ff~tg~con             contextual  

Tags: namedataframedatatypecolumntgconmapping