如何在Pandas DataFrame中按指定列条件填充对应列缺失值?
解决Pandas按条件填充指定列缺失值的问题
问题分析
你之前的代码失效的核心原因:
- 链式索引
qc_data[qc_data['NEW_QC_TEST'] == "PH"]["VALUE"]会返回原DataFrame的视图或副本(Pandas无法明确判断),使用inplace=True时,修改的可能是副本而非原DataFrame,导致原数据无变化。 - 第二种尝试的代码
qc_data[qc_data['NEW_QC_TEST'] == "PH"].fillna(6.9, inplace=True)是对符合条件的行的所有列填充6.9,而非仅VALUE列,不符合需求。
正确实现方式
方法一:使用.loc精准定位(推荐)
通过.loc直接定位目标行和列,确保修改作用于原DataFrame:
# 定位NEW_QC_TEST为PH的行,对VALUE列的缺失值填充6.9 qc_data.loc[qc_data['NEW_QC_TEST'] == "PH", 'VALUE'] = qc_data.loc[qc_data['NEW_QC_TEST'] == "PH", 'VALUE'].fillna(6.9)
方法二:使用update方法
生成填充后的目标列数据,再同步到原DataFrame:
# 生成仅包含目标列填充后的数据,更新原DataFrame fill_values = qc_data[qc_data['NEW_QC_TEST'] == "PH"]['VALUE'].fillna(6.9) qc_data.update(fill_values)
方法三:结合np.where条件赋值
用条件判断直接为缺失值赋值:
import numpy as np qc_data['VALUE'] = np.where( (qc_data['NEW_QC_TEST'] == "PH") & qc_data['VALUE'].isnull(), 6.9, qc_data['VALUE'] )
内容的提问来源于stack exchange,提问作者Jose Sanchez Palacios
相关产品推荐
相关产品推荐

