无法使用pandas.Series.replace方法将字符串'NaT'替换为None
行为差异原因
两种替换方式的效果不同是pandas replace方法的特殊参数逻辑导致的:
- 调用
replace('NaT', None)时,如果你把第二个参数设为None,pandas不会把None当作要替换的目标值,而是会判定为「你没有指定固定替换值」,自动回退到其他匹配逻辑,无法正常识别字符串格式的'NaT'做替换,所以运行后仍然有3个符合条件的值。 .loc条件赋值没有额外的隐式逻辑,就是直接定位所有值等于'NaT'的行,把对应位置的内容设置为None,所以可以正常完成替换,最后统计结果为0。
如果你想用replace方法完成替换,可以调整为以下写法:
import pandas as pd # 写法1:用字典声明替换规则,避开None的特殊逻辑 d['cancellation_month'] = d['cancellation_month'].replace({'NaT': None}) # 写法2:显式指定替换为pandas的通用缺失值 d['cancellation_month'] = d['cancellation_month'].replace('NaT', pd.NA)
两种写法都可以正常匹配替换字符串类型的'NaT'。
内容的提问来源于stack exchange,提问作者amorim-ds
相关产品推荐
相关产品推荐

