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
解决方案
老实说,我对你的问题有点困惑,但这是你要找的吗?
dataframe_data['Revised Targeting Type'] = np.where(dataframe_data['Creative Name'].str.contains('.*conbhv*', regex = True), 'contextual + behavioral', 'contextual')
推荐阅读
- python - 如何在使用 Selenium 和 Python 自动填充其默认文本之前填充 javascript 小部件
- c# - 空字符串数组
- django - 为 many=true 序列化操作序列化结果
- java - 为什么 MockBean 会抛出 NullPointer 异常
- json - 在 SharePoint Online 上显示格式正确的 JSON
- php - 连接同一数据库中另一个表中的一个完整表和一列,并使用 PHP 显示
- docker - 无法从外部到达 docker 容器
- python - 使用 Python 从随机 url 自动下载 csv 文件
- spring-boot - 获取 Spring RestTemplate 请求超时但未设置 connectionTimeout 和 ReadTimeout
- java - 当故障转移功能在 JAXWS SOAP 中处于活动状态时如何报告?