You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas结合正则删除含特定特殊字符的DataFrame列?

解决方案

你的DataFrame里第二列(无列名)包含(2.4%,需要删除所有包含(或%的列,之前的代码没生效是因为匹配逻辑或正则构造有误,以下是可行的解决方法:

方法一:正则匹配法

先构造能匹配(或%的正则表达式,再检查每列是否存在包含这类字符的单元格,过滤掉符合条件的列:

import pandas as pd

# 初始化你的DataFrame
data = {
    'Product': ['Azure', 'AWS', 'GCP'],
    '': ['(2.4%', '', ''],
    'Storage': ['Server', 'Server', 'Server'],
    'Price': ['£540', '£640', '£540']
}
df = pd.DataFrame(data)

# 构造正则:匹配(或%(括号需要转义)
regex = r'[\(\%]'
# 遍历每列,检查是否有单元格包含目标字符,保留不满足条件的列
df = df.loc[:, ~df.apply(lambda col: col.astype(str).str.contains(regex).any())]
print(df)

方法二:字符包含检查法

不用正则,直接遍历单元格检查是否包含目标字符:

# 定义要排查的特殊字符
target_chars = {'(', '%'}
# 筛选出包含目标字符的列
cols_to_drop = [col for col in df.columns 
                if df[col].astype(str).apply(lambda x: any(char in x for char in target_chars)).any()]
# 删除列
df = df.drop(cols_to_drop, axis=1)
print(df)

原代码失效原因

  1. 第一段代码用eq('(%')做严格匹配,但你的目标值是(2.4%,完全不匹配,所以找不到要删除的列;
  2. 第二段代码的正则构造有语法错误:f'[{""}.join(map(re.escape, chars))}]'里的""是错误写法,正确应该是f'[{"".join(map(re.escape, chars))}]',且未处理非字符串类型的潜在报错。

运行上述代码后,会成功删除包含(2.4%的列,最终保留Product、Storage、Price三列。

内容的提问来源于stack exchange,提问作者user19795989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:55:18