Python 如何从pandas系列中仅提取大写子字符串?

Python 如何从pandas系列中仅提取大写子字符串?,python,pandas,Python,Pandas,我一直试图从pandas数据帧中提取大写的子字符串,但没有成功。如何仅提取pandas中的大写子字符串 这是我的MWE: MWE 预期产量 您可以将re.sub()与模式[^A-Z | |]一起使用: import re df = pd.DataFrame({'col': ['cat', 'cat.COUNT(example)','cat.N_MOST_COMMON(example.ord)[2]']}) df['feat'] = df['col'].apply(lambda x: re.sub

我一直试图从pandas数据帧中提取大写的子字符串,但没有成功。如何仅提取pandas中的大写子字符串

这是我的MWE:

MWE 预期产量 您可以将
re.sub()
与模式
[^A-Z | |]
一起使用:

import re
df = pd.DataFrame({'col': ['cat', 'cat.COUNT(example)','cat.N_MOST_COMMON(example.ord)[2]']})
df['feat'] = df['col'].apply(lambda x: re.sub('[^A-Z|_]', '', x))
df
Out[1]: 
                                 col           feat
0                                cat               
1                 cat.COUNT(example)          COUNT
2  cat.N_MOST_COMMON(example.ord)[2]  N_MOST_COMMON
那么:

 df['feat'] = df.col.str.extract('([A-Z_]+)').fillna('')
输出:

                                 col           feat
0                                cat               
1                 cat.COUNT(example)          COUNT
2  cat.N_MOST_COMMON(example.ord)[2]  N_MOST_COMMON

如果您说每个单元格中只有一个大写单词,您也可以使用
replace

df['feat'] = df['col'].str.replace(r"[^A-Z_]", '')

Out[681]:
                                 col           feat
0                                cat
1                 cat.COUNT(example)          COUNT
2  cat.N_MOST_COMMON(example.ord)[2]  N_MOST_COMMON

请共享您的预期输出。可能与重复。无论如何,您可以在lambda函数中应用这些替代方法中的任何一种,就像这里的答案一样。@CainãMaxCouto Silva这个问题是关于正则表达式模块的,这里我尝试使用的是提取方法而不是re.sub方法。@MilkyWay001看起来Quang已经为您准备好了。@MilkyWay001,明白了!看来你已经有了(相当简洁的)答案了。我很欣赏这种提取方法。实际上,我想从字符串中提取
agg
feat
。在更新此问题之前,我将提出一个新问题作为后续。我有一个更复杂的问题需要在此处使用摘录:
                                 col           feat
0                                cat               
1                 cat.COUNT(example)          COUNT
2  cat.N_MOST_COMMON(example.ord)[2]  N_MOST_COMMON
df['feat'] = df['col'].str.replace(r"[^A-Z_]", '')

Out[681]:
                                 col           feat
0                                cat
1                 cat.COUNT(example)          COUNT
2  cat.N_MOST_COMMON(example.ord)[2]  N_MOST_COMMON