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

移除Pandas Series中的NaN值:现有方案均无效求解决

解决Pandas Series中无法移除NaN值的问题

让我来帮你排查问题并给出解决方案:

首先,你尝试的代码里有几个明显的问题:

  • 你写的 .s[~s.isnull()] 是错误的——Pandas Series 根本没有 .s 这个属性,这行代码会直接抛出 AttributeError,根本没机会执行到移除NaN的逻辑。
  • 你的 run_ttest 函数里还有两行完全冗余的代码:
    Notunitowns['Notunitownvalues'] = Notunitowns['Notunitownvalues'] 
    Unitowns['Unitownvalues'] = Unitowns['Unitownvalues'] 
    
    这两行只是把列的值重新赋值给自己,没有任何实际作用,直接删掉就行。

接下来,给你两种可行的解决方案:

方案一:在函数内部直接返回清理好的Series

我帮你优化了 run_ttest 函数,让它更简洁高效,同时在返回前就处理掉NaN值:

import pandas as pd

def run_ttest(): 
    Townames = []
    Notowns = []
    # 用zip同时遍历RegionName和differ列,比enumerate更直观
    for region, differ in zip(data['RegionName'], data['differ']):
        if region in stateslist:
            Townames.append(differ)
        else:
            Notowns.append(differ)
    # 直接创建Series并调用dropna()移除NaN,不用绕DataFrame的弯路
    unitown_series = pd.Series(Townames, name='Unitownvalues').dropna()
    notunitown_series = pd.Series(Notowns, name='Notunitownvalues').dropna()
    # 如果需要同时返回两个Series,用元组打包返回
    return unitown_series, notunitown_series

# 调用函数,拿到清理后的两个Series
unitown_values, notunitown_values = run_ttest()

方案二:在函数返回后再清理NaN值

如果你不想修改原函数,也可以在调用 run_ttest() 之后直接处理返回的Series:

# 获取原始带NaN的Series
raw_series = run_ttest()
# 移除NaN值
cleaned_series = raw_series.dropna()
# 可选:重置索引(移除NaN后索引会有断层,重置后索引从0开始连续)
cleaned_series = cleaned_series.reset_index(drop=True)

另外,你之前尝试的 .dropna() 方法本身是有效的,之所以没成功,大概率是因为前面的 .s[~s.isnull()] 代码报错,导致后续的 .dropna() 逻辑根本没执行到。如果保留原函数的结构,正确的写法应该是:

# 正确移除DataFrame列中的NaN
Unitowns['Unitownvalues'] = Unitowns['Unitownvalues'].dropna()

执行这行后,记得使用更新后的 Unitowns['Unitownvalues'] 来进行后续操作。

最后,也可以检查下你的 stateslist 是否准确,有没有因为匹配逻辑的问题,导致错误地把NaN值添加到了 Townames 列表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:12:31