如何在Pandas DataFrame中移除孤立值(替换为None)
移除Pandas DataFrame中的孤立值(前后均为None的数值)
需求:将DataFrame中前后行均为None的数值替换为None,即移除这类孤立值。
初始DataFrame:
| 列A | 列B |
|---|---|
| 1 | |
| 1 | 1 |
| 1 | 1 |
| 1 | |
| 1 | 1 |
| 1 | 1 |
目标DataFrame:
| 列A | 列B |
|---|---|
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | 1 |
| 1 | 1 |
实现代码
利用Pandas的shift()方法可快速定位并处理孤立值,代码简洁高效:
import pandas as pd import numpy as np # 构建初始DataFrame df = pd.DataFrame({ '列A': [np.nan, 1, np.nan, 1, 1, 1, 1], '列B': [1, 1, np.nan, 1, np.nan, 1, 1] }) # 生成掩码:标记当前非空、前后均为空的位置 mask = df.notna() & df.shift(1).isna() & df.shift(-1).isna() # 将掩码标记的位置替换为None(即NaN) df = df.mask(mask)
代码说明
df.notna():筛选当前单元格不为空的位置df.shift(1).isna():筛选当前单元格的前一行为空的位置df.shift(-1).isna():筛选当前单元格的后一行为空的位置- 三者取交集得到的掩码,就是需要替换的孤立值位置,用
mask()方法将这些位置设为NaN(对应需求中的None)
内容的提问来源于stack exchange,提问作者user23457300
相关产品推荐
相关产品推荐

