我得到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