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

如何在Pandas中查找DataFrame列中空值对应的区间范围?

解决DataFrame中NaN值对应连续字符区间的提取问题

你已经定位到了NaN值的索引,但需要把这些连续NaN对应的Column_1字符转换成指定的区间格式对吧?我给你一个简洁的实现方案,核心思路是先把连续的NaN行分组,再对每组生成对应的区间字符串。

首先先还原你的示例DataFrame方便测试:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Column_1': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M'],
    'Column_2': [10, 20, np.nan, np.nan, np.nan, 60, 65, np.nan, np.nan, np.nan, 90, np.nan, 100]
})

接下来是核心代码,我会一步步拆解逻辑:

# 生成分组键:每遇到一个非NaN值,分组号就递增,这样连续的NaN会被分到同一组
df['group'] = df['Column_2'].notna().cumsum()

# 筛选出所有Column_2为NaN的行,按group分组提取Column_1
nan_groups = df[df['Column_2'].isna()].groupby('group')['Column_1']

# 遍历每个分组,生成目标格式的区间字符串
result = []
for _, chars in nan_groups:
    char_list = list(chars)
    if len(char_list) == 1:
        result.append(f'[{char_list[0]}]')
    else:
        result.append(f'[{char_list[0]}-{char_list[-1]}]')

print(result)
# 输出结果正好是你想要的:['[C-E]', '[H-J]', '[L]']

关键步骤解释:

  • 分组逻辑:df['Column_2'].notna().cumsum()会把非NaN的行标记为1,累加后,每出现一个非NaN值,分组号就+1,这样连续的NaN行就会被归为同一个分组,完美区分开不连续的NaN块。
  • 分组处理:筛选出NaN行后按分组聚合,每个分组就是一段连续的Column_1字符。
  • 格式生成:判断每个分组的长度,单个字符就直接用[X],多个字符就用[首字符-尾字符]的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:32:33