如何按条件修改DataFrame列:当proba列为NaN时将对应flag列设为0
实现方案
两种常用的稳定实现方式如下:
方法1:使用loc定位修改(推荐,性能最优,无副作用)
直接定位符合条件的行修改flag列值,会直接修改原DataFrame:
import pandas as pd # 核心逻辑 df.loc[df['proba'].isna(), 'flag'] = 0
逻辑说明:df['proba'].isna()会返回布尔序列,匹配所有proba列为NaN的行,loc定位到这些行的flag列后直接赋值为0。
方法2:使用np.where生成新列
如果你不想修改原DataFrame,需要生成新的列/新表可以用这个方法:
import pandas as pd import numpy as np # 生成新的flag列,不修改原df df['new_flag'] = np.where(df['proba'].isna(), 0, df['flag']) # 如果要直接覆盖原flag列也可以写为 df['flag'] = np.where(df['proba'].isna(), 0, df['flag'])
注意事项
- pandas 1.0以下的旧版本中,可以把
isna()替换为isnull(),两者功能完全一致,isna()是后续版本新增的别名 - 如果需要生成全新的DataFrame不改动原表,可提前对原表做拷贝:
new_df = df.copy(),再对new_df做修改操作
内容的提问来源于stack exchange,提问作者Sam324
相关产品推荐
相关产品推荐

