如何从pandas系列中只提取大写的子字符串



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

这是我的MWE:

MWE

import numpy as np
import pandas as pd

df = pd.DataFrame({'col': ['cat', 'cat.COUNT(example)','cat.N_MOST_COMMON(example.ord)[2]']})
df['feat'] = df['col'].str.extract(r"[^A-Z]*([A-Z]*)[^A-Z]*")

print(df)
"""
col feat
0                                cat  NaN
1                 cat.COUNT(example)    T
2  cat.N_MOST_COMMON(example.ord)[2]    N
""";

预期输出

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

您可以将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

最新更新