如何修改Python Pandas代码 仅对NR列非NaN行计算年龄
实现代码
你可以直接通过Series.where()显式指定仅对非空的NR行执行计算,空值行自动保留NaN,若需要示例中的整数年龄结果,额外做可空整数类型转换即可:
import pandas as pd import numpy as np # 替换为你实际使用的基准日期 ABT_DATE = pd.to_datetime("2022-01-01") df["age"] = ( (ABT_DATE - pd.to_datetime(df.NR.str[:6], format="%y%m%d")) / np.timedelta64(1, "Y") ).where(df.NR.notna()) # 仅NR非空时返回计算结果,否则返回NaN # 若需要输出整数年龄,加下面这行转换为可空整数类型 df["age"] = df["age"].round().astype("Int64")
补充说明
- 实际上你原有代码的pandas原生矢量化操作天生兼容空值:
df.NR.str[:6]遇到NaN会直接返回NaN,pd.to_datetime转换后得到NaT,最终计算结果也会自动为NaN,不需要额外修改也能满足空值行返回NaN的需求。加where只是让逻辑更显式,可读性更好。 - 用
Int64(首字母大写)是pandas的可空整数类型,避免普通int类型不能兼容NaN、自动把NaN转成浮点数的问题。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

