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

如何在Python Pandas中查找仅含单个标点符号值的列?

问题描述

现有如下结构的DataFrame:

COL1 | COL2 | COL3
-----|------|--------
abc  | P    | 123
b.bb | ,    | 22
  1  | B    | 2
...  |...   | ...

需要找出仅包含指定标点符号(标点范围:!"#$%&'()*+,-./:;<=>?@[]^_{|}~`)的列。注意:若列中存在“标点符号与其他字符共存”的元素(如COL1中的`b.bb`),则该列不符合要求。

注:示例中COL2的P、B应为标点符号输入失误,否则不符合“仅包含标点”的要求

预期结果(仅保留符合条件的COL2):

COL2 
-------
 P    
 ,    
 B   
... 
解决方案

使用Python的Pandas库可快速实现需求,以下是两种场景的代码实现:

场景1:严格匹配“仅包含标点符号”的列

代码实现

import pandas as pd

# 构造修正后的示例DataFrame(COL2替换为标点符号)
data = {
    'COL1': ['abc', 'b.bb', '1'],
    'COL2': ['!', ',', '@'],
    'COL3': ['123', '22', '2']
}
df = pd.DataFrame(data)

# 正则表达式:匹配仅由指定标点组成的字符串(自动去除元素前后空格)
punct_regex = r'^[!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~]+$'

# 筛选所有元素均符合规则的列
valid_columns = df.columns[df.apply(lambda col: col.str.strip().str.fullmatch(punct_regex).all())]

# 获取结果
result_df = df[valid_columns]
print(result_df)

输出结果

COL2
0    !
1    ,
2    @

场景2:保留“无标点与其他字符混合元素”的列

若你的真实需求是允许列中存在纯字母/数字元素,仅排除包含“标点+其他字符”混合元素的列,可使用以下代码:

import pandas as pd

data = {
    'COL1': ['abc', 'b.bb', '1'],
    'COL2': ['P', ',', 'B'],
    'COL3': ['123', '22', '2']
}
df = pd.DataFrame(data)

# 定义标点符号集合
punct_set = set(r'!"#$%&\'()*+,-./:;<=>?@[]^_`{|}~')

# 判断元素是否同时包含标点和非标点字符
def is_mixed(s):
    s_clean = s.strip()
    has_punct = any(c in punct_set for c in s_clean)
    has_non_punct = any(c not in punct_set for c in s_clean)
    return has_punct and has_non_punct

# 筛选无混合元素的列
valid_columns = df.columns[~df.apply(lambda col: col.apply(is_mixed).any())]
result_df = df[valid_columns]
print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:20:48