如何从熊猫系列中仅提取大写子串?

时间:2020-10-20 19:37:28

标签: python pandas

我一直在尝试从pandas数据帧中提取大写子字符串,但还是没有用。如何仅提取大写字母大写子字符串?

这是我的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

3 个答案:

答案 0 :(得分:3)

怎么样:

 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

答案 1 :(得分:2)

如果您说每个单元格中只有一个大写单词,则也可以使用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

答案 2 :(得分:1)

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