我一直在尝试从pandas数据帧中提取大写子字符串,但还是没有用。如何仅提取大写字母大写子字符串?
这是我的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
答案 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