Pandas DataFrame新增第二单引号时无引号行变为NaN如何解决
问题根因
你原来的代码只筛选出了包含单引号的行做替换处理,再将这部分仅包含匹配行的结果赋值给整个email_address列,未被筛选匹配的行没有对应值,自然会被填充为NaN。
最优解决方案
其实不需要提前筛选包含单引号的行,Series.str.replace()本身只会替换字符串中存在的匹配字符,没有匹配内容的字符串会原封不动返回,直接对全列做替换即可:
# 空值会统一转为空字符串 df['email_address'] = df['email_address'].fillna('').str.replace("'", "''")
如果需要保留原始的空值(不需要把NaN转成空字符串),可以调整为:
# 空值直接保留不做处理 df['email_address'] = df['email_address'].str.replace("'", "''", na_action='ignore')
可选条件处理方案
如果确实需要按条件分支处理,可以用np.where实现,避免未匹配行出现NaN:
import numpy as np df['email_address'] = np.where( df['email_address'].fillna('').str.contains("'"), df['email_address'].str.replace("'", "''"), df['email_address'] )
处理后的结果示例:
| Name | email_address |
|---|---|
| A | JARED.O''CALLAGHAN@CBS.COM |
| B | ZACK.O''LEARY@ABC.COM |
| C | ALEX.SMITH@NBC.COM |
内容的提问来源于stack exchange,提问作者Andrew Hicks
相关产品推荐
相关产品推荐

