如何在Python Pandas中找到标点符号为单个值的列?

j9per5c4  于 2022-12-25  发布在  Python
关注(0)|答案(2)|浏览(104)

我有如下的DataFrame:

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

我需要找到只有标点符号的列,如!"#$%&'()*+,-./:;〈=〉?@[]^_`{|}~
因此,作为一个结果,我需要像下面的东西(只有COL2,因为在COL1也是标点符号,但有与其他值)。

COL2 
-------
 P    
 ,    
 B   
...
kgqe7b3p

kgqe7b3p1#

使用str.fullmatchany的正则表达式:

import re

chars = '''!"#$%&'()*+,-./:;<=>?@[]^_`{|}~'''
pattern = f'[{re.escape(chars)}]'
# [!"\#\$%\&'\(\)\*\+,\-\./:;<=>\?@\[\]\^_`\{\|\}\~]

out = df.loc[:, df.astype(str).apply(lambda s: s.str.fullmatch(pattern).any())]

或者使用isin

out = df.loc[:, df.isin(set(chars)).any()]

输出:

COL2
0    P
1    ,
2    B
7d7tgy0s

7d7tgy0s2#

punc = set("!\"#$%&'()*+,-./:;<=>?@[]^_`{|}~")
df.loc[:, df.applymap(lambda x: set(x).issubset(punc)).any()]

相关问题