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

若DataFrame首尾非NaN字符串相等,如何将末尾值设为NaN?

解决方案

问题描述

我有如下DataFrame:

value
0 yes
1 nan
2 no
3 nan
4 yes
5 no
6 yes
7 nan
8 nan
9 nan

无法保证首个非NaN值(如示例中的yes)一定位于第一行,它也可能出现在后续索引位置。需要检查首个非NaN字符串与最后一个非NaN字符串是否相等,若相等则将后者设为NaN。本示例中索引6的值与索引0相等,需将其设为NaN,最终结果如下:

value
0 yes
1 nan
2 no
3 nan
4 yes
5 no
6 nan  # 因为和首个非NaN值相等,设为nan
7 nan
8 nan
9 nan

实现代码

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'value': ['yes', np.nan, 'no', np.nan, 'yes', 'no', 'yes', np.nan, np.nan, np.nan]
})

# 提取所有非NaN的序列,避免原索引干扰
non_nan = df['value'].dropna()

# 只有当非NaN值数量≥2时才执行判断逻辑
if len(non_nan) >= 2:
    first_val = non_nan.iloc[0]
    last_idx = non_nan.index[-1]
    last_val = non_nan.iloc[-1]
    
    # 若首尾非NaN值相等,将最后一个设为NaN
    if first_val == last_val:
        df.loc[last_idx, 'value'] = np.nan

print(df)

代码说明

  • 先通过dropna()过滤出所有非NaN值的序列,直接获取首尾有效数据的索引和值,不受原DataFrame中NaN的干扰
  • 增加非NaN值数量判断,避免只有单个或没有有效数据时出现索引越界错误
  • 通过loc精准定位最后一个非NaN值的位置,修改为NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:20:34