如何在Pandas中识别并输出连续缺失值(NaN)的位置区间?
Pandas识别NaN行号并格式化输出区间
问题描述
现有如下Pandas数据:
Num Name 1 abcd 2 nan 3 nan 4 efdg 5 nan 6 hij 7 nan 8 nan 9 nan 10 nan 11 xyz需求:识别数据中NaN值的位置,将连续NaN对应的行号合并为
(起始,结束)的区间形式,单个NaN则保留行号,最终输出格式如下:(2,3) , 5 , (7,10)目前尝试分组数据,但未得到预期结果。
解决方案
核心思路
- 筛选出
Name列值为NaN对应的Num行号 - 通过判断行号连续性对数据分组:连续行号归为一组,非连续则开启新组
- 针对每组长度,生成单个行号或区间格式的字符串
- 拼接所有格式字符串得到最终输出
代码实现
import pandas as pd import numpy as np # 构造示例数据 data = { 'Num': [1,2,3,4,5,6,7,8,9,10,11], 'Name': ['abcd', np.nan, np.nan, 'efdg', np.nan, 'hij', np.nan, np.nan, np.nan, np.nan, 'xyz'] } df = pd.DataFrame(data) # 提取Name列NaN对应的Num值 nan_num_list = df[df['Name'].isna()]['Num'].tolist() if not nan_num_list: print("无NaN值") else: # 对连续行号分组 groups = [] current_group = [nan_num_list[0]] for num in nan_num_list[1:]: if num == current_group[-1] + 1: current_group.append(num) else: groups.append(current_group) current_group = [num] groups.append(current_group) # 加入最后一组 # 生成格式化片段 result_fragments = [] for group in groups: if len(group) == 1: result_fragments.append(str(group[0])) else: result_fragments.append(f"({group[0]},{group[-1]})") # 拼接成最终输出 final_output = " , ".join(result_fragments) print(final_output)
运行结果
(2,3) , 5 , (7,10)
内容的提问来源于stack exchange,提问作者Karthik Kini
相关产品推荐
相关产品推荐

