如何在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
相关产品推荐
相关产品推荐

