如何按条件清除DataFrame指定单元格值生成新数据框
Pandas 按条件清空指定单元格实现方案
核心逻辑是先定位所有符合清空规则的行,再对这些行的目标列赋值空值即可,全程不需要删除整行或整列,也不会改动其他单元格的原有内容。
完整实现步骤
- 先构造和需求匹配的测试数据集,对应4个样本A/B/C/D的5列原始数据:
import pandas as pd import numpy as np # 构造示例原始DataFrame df = pd.DataFrame({ 'Sample': ['A', 'B', 'C', 'D'], 'Size_1': [3, 2, 5, 1], 'Height_1': [10, 8, 15, 6], 'Size_2': [4, 6, 6, 5], 'Height_2': [9, 12, 14, 9] })
- 生成行匹配掩码,标记出所有满足「Size_2 - Size_1 <= 2 且 Height_2 <= Height_1」规则的行:
# 条件判断用&表示逻辑与,每个判断条件要加括号 clear_row_mask = (df['Size_2'] - df['Size_1'] <= 2) & (df['Height_2'] <= df['Height_1'])
- 复制原始数据生成独立的新数据框,对标记行的
Size_2、Height_2列赋值空值:
# 复制原数据避免修改原始df new_df = df.copy() # 定位到需要修改的位置,赋值空值(数值列空值用np.nan即可) new_df.loc[clear_row_mask, ['Size_2', 'Height_2']] = np.nan
运行结果
执行完代码后new_df的输出完全符合预期:
- 样本A、C满足清空规则,对应
Size_2、Height_2单元格为空 - 样本B、D不满足规则,原有数值全部保留
输出效果参考:
| Sample | Size_1 | Height_1 | Size_2 | Height_2 |
|---|---|---|---|---|
| A | 3 | 10 | NaN | NaN |
| B | 2 | 8 | 6.0 | 12.0 |
| C | 5 | 15 | NaN | NaN |
| D | 1 | 6 | 5.0 | 9.0 |
注意事项
- 如果不需要保留原始DataFrame,可以跳过
copy()步骤直接在原df上执行loc赋值操作 - 数值列的
np.nan空值导出到Excel/CSV时会自动显示为空白单元格,不需要额外做格式转换 - 多条件判断时每个单独的条件表达式必须用括号包裹,否则会因为运算符优先级问题报错
内容的提问来源于stack exchange,提问作者Medex
相关产品推荐
相关产品推荐

