分割函数,返回pandas中不匹配模式的NaN



我得到NaN为非数学模式w.r.t在熊猫分割。

源数据:

Attr          
[ABC].[xyz]    
CDE

代码:

df['Extr_Attr'] = np.where((df.Attr.str.contains('.')),df['Attr'].str.split('.',1).str[1], df.Attr)
This returns NaN for data that does not have a match of '.' in source data.

预期输出:

Attr           Extr_Attr
[ABC].[xyz]    [xyz]
CDE             CDE

假设您想要点后面的最后一个块(如果有,则为完整字符串)

如果你想分割,使用rsplit并分割最后的项目:

df['Extr_Attr'] = df['Attr'].str.rsplit('.', 1).str[-1]

或者更有效地使用extract(将所有非.字符放在字符串的末尾):

df['Extr_Attr'] = df['Attr'].str.extract(r'([^.]+)$')

输出:

Attr Extr_Attr
0  [ABC].[xyz]     [xyz]
1          CDE       CDE

我想我们可以跳过str.contains,使用.split.fillna

df['Extr_Attr'] = df['Attr'].str.split('.').str[1].fillna(df['Attr'])
Attr Extr_Attr
0  [ABC].[xyz]     [xyz]
1          CDE       CDE

最新更新