You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅删除Pandas DataFrame列中间非首尾的NaN行?

Pandas保留首尾连续NaN、删除中间零散NaN行的解决方案

核心思路

要实现目标,关键是区分两类NaN区域:

  • 首尾连续NaN:位于第一个非NaN值之前,或最后一个非NaN值之后的所有NaN行,这类需要保留
  • 中间零散NaN:夹在两个非NaN值之间的NaN行,这类需要删除

代码实现

import pandas as pd
import numpy as np

# 原始DataFrame
df = pd.DataFrame({'A': [np.nan, np.nan, np.nan, np.nan, 45, 1, np.nan, 2, np.nan, 3, np.nan, 6, np.nan, np.nan, 8, 9, 15, np.nan, 18, np.nan, np.nan, np.nan, np.nan],
'B': [22,33,44,55,66,22,11,34,55,67,55,66,22,11,34,33,44,55,6,96,64,93,81]})

# 获取列A中第一个和最后一个非NaN值的索引
first_valid = df['A'].first_valid_index()
last_valid = df['A'].last_valid_index()

# 构造过滤掩码:保留首尾区域,或中间区域非NaN的行
filter_mask = (df.index <= first_valid) | (df.index >= last_valid) | (df['A'].notna())

# 生成结果DataFrame并重置索引
df_new = df[filter_mask].reset_index(drop=True)

输出验证

运行代码后得到的df_new与期望完全一致:

A   B
0   NaN  22
1   NaN  33
2   NaN  44
3   NaN  55
4  45.0  66
5   1.0  22
6   2.0  34
7   3.0  67
8   6.0  66
9   8.0  34
10  9.0  33
11 15.0  44
12 18.0   6
13  NaN  96
14  NaN  64
15  NaN  93
16  NaN  81

内容的提问来源于stack exchange,提问作者EnigmAI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:53:12