DataFrame过滤:将不含%G%或%P%的水果值替换为NaN
问题描述
对DataFrame中的Fruit1、Fruit2、Fruit3列执行过滤操作:
- 保留包含字符
P或G的水果值 - 不满足条件的替换为
NaN
原始数据
| Unique ID | Fruit1 | Fruit2 | Fruit3 |
|---|---|---|---|
| 1234 | Banana | Peach | Guava |
| 1235 | Orange | Grape | NaN |
| 1236 | Pear | Papaya | Apricot |
| 1237 | Guava | NaN | NaN |
| 1238 | Kiwi | Cherry | Peach |
期望结果
| Unique ID | Fruit1 | Fruit2 | Fruit3 |
|---|---|---|---|
| 1234 | NaN | Peach | Guava |
| 1235 | NaN | Grape | NaN |
| 1236 | Pear | Papaya | NaN |
| 1237 | Guava | NaN | NaN |
| 1238 | NaN | NaN | Peach |
解决方案
使用Pandas的字符串匹配与条件替换实现需求,代码如下:
import pandas as pd # 构建原始数据集 data = { 'Unique ID': [1234, 1235, 1236, 1237, 1238], 'Fruit1': ['Banana', 'Orange', 'Pear', 'Guava', 'Kiwi'], 'Fruit2': ['Peach', 'Grape', 'Papaya', pd.NA, 'Cherry'], 'Fruit3': ['Guava', pd.NA, 'Apricot', pd.NA, 'Peach'] } df = pd.DataFrame(data) # 指定需要处理的水果列 fruit_columns = ['Fruit1', 'Fruit2', 'Fruit3'] # 过滤并替换:保留含P/G的项,其余转为NaN df[fruit_columns] = df[fruit_columns].apply( lambda col: col.where(col.str.contains('P|G', na=False), pd.NA) ) print(df)
代码解释
str.contains('P|G', na=False):检测字符串是否包含P或G,na=False确保原始NaN值不被误处理col.where(condition, pd.NA):满足匹配条件时保留原数值,否则替换为NaN
内容的提问来源于stack exchange,提问作者Storm
相关产品推荐
相关产品推荐

