python - 检查某个特定字符串是否存在于数据框的列中;如果存在,则为其添加前缀
问题描述
我想要一个解决方案,我必须检查数据框列的值是否具有特定代码,如果是,我将为其添加预定义的前缀。为了更容易,请查看以下示例。比如说我有一个如下所示的数据框。
PRODUCT_KEY
EXI-CD_5S-WW5678
EX-PWN-PRO-193
EX-NIS-NS-HZ049
EX-NCI-DSI-A-R
EX-GCA-FAC-F
AU-345654
NL-108793
HK-678903
WW-564312
DE-123243
所以对于这个专栏,我想做的是;我想检查它是否以'AU'或'NL'或'HK'或'ww'或'DE'开头,如果是这样,那么我将添加一个前缀'GST-YIP',其余的它将是相同的。生成的数据框如下所示。
PRODUCT_KEY
EXI-CD_5S-WW5678
EX-PWN-PRO-193
EX-NIS-NS-HZ049
EX-NCI-DSI-A-R
EX-GCA-FAC-F
GST-YIP-AU-345654
GST-YIP-NL-108793
GST-YIP-HK-678903
GST-YIP-WW-564312
GST-YIP-DE-123243
我正在尝试在 for 循环中执行此操作。
for i in df['PRODUCT_KEY']:
if i.str.contains('AU'|'HK'|'WW'|'DE'):
df['PRODUCT_KEY] = 'INC-AAB' + i
else:
f['PRODUCT_KEY] = i
但这并没有给我正确的结果。
解决方案
与np.where
_.str.startswith
前任:
import numpy as np
df["New"] = np.where(df["PRODUCT_KEY"].str.startswith(('AU', 'NL','HK','WW')), "GST-YIP-"+df["PRODUCT_KEY"], df["PRODUCT_KEY"])
print(df)
输出:
PRODUCT_KEY New
0 EXI-CD_5S-WW5678 EXI-CD_5S-WW5678
1 EX-PWN-PRO-193 EX-PWN-PRO-193
2 EX-NIS-NS-HZ049 EX-NIS-NS-HZ049
3 EX-NCI-DSI-A-R EX-NCI-DSI-A-R
4 EX-GCA-FAC-F EX-GCA-FAC-F
5 AU-345654 GST-YIP-AU-345654
6 NL-108793 GST-YIP-NL-108793
7 HK-678903 GST-YIP-HK-678903
8 WW-564312 GST-YIP-WW-564312
9 DE-123243 DE-123243
使用正则表达式
前任:
import re
ptrn = re.compile(r"^("+ "|".join(('AU', 'NL','HK','ww')) + r")", flags=re.I)
df["New"] = df["PRODUCT_KEY"].str.replace(ptrn, "GST-YIP-"+ r"\1")
推荐阅读
- bash - 使用 bash 脚本根据用户的输入编辑文件
- python - 我有一个 python FuncAnimation 绘图并正确运行。但是,MP4 文件要么是静止图像,要么是空图
- android - 如何在没有字符串连接的情况下在 Kotlin/android setText 中显示带有参数的字符串?
- java - Android - FileOutputStream/GZIPOutputStream 是否完全可靠?
- python - 我可以强制杀死这个线程吗?
- reactjs - 反应代码在我的 eccomrece 网站上不起作用
- amazon-web-services - VPC 终端节点 DNS 未响应
- xml - XML 安装程序 - 检测 Joomla 版本
- java - 映射错误,找不到错误
- javascript - 无法在基于事件的函数中更新数组类型的 useState