Pandas中Split函数匹配失败返回NaN问题及期望输出实现
Pandas字符串拆分:解决非匹配模式返回NaN的问题
问题根源
你写的代码里,str.contains('.')的.是正则表达式的通配符,会匹配任意单个字符——这意味着所有字符串都会被判定为符合条件,不含.的行也会执行str.split('.',1).str[1],而拆分后没有第二个元素,自然返回NaN。
解决方案
方法1:修正匹配规则
把.当作普通字符串匹配,有两种实现方式:
- 转义正则特殊字符:
df['Extr_Attr'] = np.where(df.Attr.str.contains('\.'), df['Attr'].str.split('\.',1).str[1], df.Attr)
- 关闭正则模式:
df['Extr_Attr'] = np.where(df.Attr.str.contains('.', regex=False), df['Attr'].str.split('.',1).str[1], df.Attr)
方法2:拆分后填充NaN
直接拆分并提取第二部分,用原列值填充NaN,写法更简洁:
df['Extr_Attr'] = df['Attr'].str.split('.', 1, expand=True)[1].fillna(df['Attr'])
最终效果
运行后得到符合预期的结果:
| Attr | Extr_Attr |
|---|---|
| [ABC].[xyz] | [xyz] |
| CDE | CDE |
内容的提问来源于stack exchange,提问作者kmr
相关产品推荐
相关产品推荐

