pandas Split函数返回panda中不匹配模式的NaN

mrwjdhj3  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(211)

我得到了非数学模式的NaN w.r.t在Pandas中分裂。
来源数据:

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
vh0rcniy

vh0rcniy1#

假设您需要点后面的最后一个块(如果有,则为完整字符串)。
如果要拆分,请使用rsplit并对last项进行切片:

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
zlwx9yxi

zlwx9yxi2#

我想我们可以跳过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

相关问题