1 回答
TA贡献1877条经验 获得超1个赞
对于feat,由于您已经在其他 StackOverflow 问题中得到了答案agg,我认为您可以使用以下内容根据两个不同的模式提取两个不同的系列,这些模式彼此分开|,然后fillna()一个系列与另一个系列分开。
^([^A-Z]*$)仅当完整字符串为小写时才返回完整字符串
[^a-z].*example\.([a-z]+)\).*$example.仅当之前的)字符串中有大写字母时才应返回之后和之前的字符串example.
df = pd.DataFrame({'item': ['num','bool', 'cat', 'cat.COUNT(example)','cat.N_MOST_COMMON(example.ord)[2]','cat.FIRST(example.ord)','cat.FIRST(example.num)']})
s = df['item'].str.extract('^([^A-Z]*$)|[^a-z].*example\.([a-z]+)\).*$', expand=True)
df['feat'] = s[0].fillna(s[1]).fillna('')
df
Out[1]:
item feat
0 num num
1 bool bool
2 cat cat
3 cat.COUNT(example)
4 cat.N_MOST_COMMON(example.ord)[2] ord
5 cat.FIRST(example.ord) ord
6 cat.FIRST(example.num) num
上面给出了您正在寻找样本数据的输出,并符合您的条件。然而:
如果后面有大写怎么办example.?电流输出将返回''
请参见下面的示例#2,其中一些数据根据上述点进行了更改:
df = pd.DataFrame({'item': ['num','cat.count(example.AAA)', 'cat.count(example.aaa)', 'cat.count(example)','cat.N_MOST_COMMON(example.ord)[2]','cat.FIRST(example.ord)','cat.FIRST(example.num)']})
s = df['item'].str.extract('^([^A-Z]*$)|[^a-z].*example\.([a-z]+)\).*$', expand=True)
df['feat'] = s[0].fillna(s[1]).fillna('')
df
Out[2]:
item feat
0 num num
1 cat.count(example.AAA)
2 cat.count(example.aaa) cat.count(example.aaa)
3 cat.count(example) cat.count(example)
4 cat.N_MOST_COMMON(example.ord)[2] ord
5 cat.FIRST(example.ord) ord
6 cat.FIRST(example.num) num
添加回答
举报