如何将pandas DataFrame中包含指定字符模式的字符串替换为None
pandas实现方案
首先给出完整可运行的代码,包含测试数据构造、转换逻辑、结果验证三个部分:
1. 导入依赖并构造测试数据集
import pandas as pd # 构造和你示例一致的原始数据集 df = pd.DataFrame( data=[ ["transport", "aa", "uu"], ["industry)", "bb", "tt"], ["aviation)", "cc", "tt"] ], columns=["departments", "var1", "var1.1"] ) # 重命名列名匹配你预期的输出 df.rename(columns={"var1.1": "var2"}, inplace=True)
2. 核心转换逻辑
你提供的Spark代码逻辑是:departments列匹配包含)的正则时返回None,否则返回原值,对应pandas有两种实现方式:
写法1:和Spark逻辑完全对齐的where实现
df["departments"] = df["departments"].where( # 不匹配正则的行保留原值,对应Spark的otherwise逻辑 ~df["departments"].str.contains(r"\)", na=False), # 匹配正则的行替换为None,对应Spark的when满足条件返回None的逻辑 None )
写法2:更简洁的mask实现
# mask方法会在条件为真时替换对应值,更符合需求的直观表达 df["departments"] = df["departments"].mask( df["departments"].str.contains(r"\)", na=False), None )
3. 结果验证
执行print(df)后即可得到你预期的输出:
departments var1 var2 0 transport aa uu 1 None bb tt 2 None cc tt
注意:参数
na=False是为了避免departments列存在空值时判断逻辑报错,如果你能保证该列没有空值,可以省略该参数。
内容的提问来源于stack exchange,提问作者id345678
相关产品推荐
相关产品推荐

