You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中为Age<18的行填充Marital Status列NA值为Single?

问题解决方法

先说说你原来代码的问题:

  • 遍历df['Age']的每个值,但没关联对应的行索引,没法精准定位该行的Marital Status列。
  • df['Marital Status'].fillna('Single')默认返回新的Series,不会修改原DataFrame;而且这是对整个列填充,不是只针对Age<18的行。

正确做法是用Pandas的矢量化操作,精准定位符合条件的行再赋值:

最优解决方案

直接用loc定位满足两个条件的行(Age<18且Marital Status为缺失值),然后赋值为Single:

import pandas as pd
import numpy as np

# 示例DataFrame(替换成你的数据即可)
df = pd.DataFrame({
    'Age': [15, 22, 17, 30, 16],
    'Marital Status': [np.nan, 'Married', np.nan, 'Divorced', np.nan]
})

# 核心代码
df.loc[(df['Age'] < 18) & (df['Marital Status'].isna()), 'Marital Status'] = 'Single'

执行后,所有Age<18且Marital Status为NA的行都会被填充为Single,其他行不受影响。

补充:用fillna实现的方式

也可以结合apply生成填充规则后传给fillna,不过效率不如第一种方法:

df['Marital Status'] = df['Marital Status'].fillna(
    df['Age'].apply(lambda x: 'Single' if x < 18 else np.nan)
)

注意:Pandas里尽量避免用for循环遍历行,矢量化操作不仅代码简洁,运行效率也远高于循环。

内容的提问来源于stack exchange,提问作者Hford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:17:07