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

Python中定义Rower函数统计Pandas DataFrame含NaN行数的方法(新手向)

如何实现统计含NaN值行数的Rower函数?

嘿,作为Python纯新手,别担心,咱们一步步来搞清楚这个问题~你现在的代码是统计了DataFrame里所有NaN的总数,而我们需要的是至少包含一个NaN值的行数,这两者的区别还是挺大的,我来给你拆解清楚。

第一步:先搞懂函数的基本定义

对于Python函数来说,基本结构非常清晰:

def 函数名(参数):
    # 函数内部的逻辑代码
    return 返回值

你之前定义的pandasNull其实已经符合这个基础结构啦,只是内部的统计逻辑需要调整。现在我们要把函数名改成你想要的Rower,参数依然是接收一个pandas DataFrame对象。

第二步:实现统计含NaN行数的核心逻辑

我们需要的是判断每一行里是否存在至少一个NaN,然后统计这样的行数。这里可以用pandas的几个方法组合完成:

  • df.isna():把DataFrame里的每个元素转换成布尔值,NaN的位置标记为True,非NaN标记为False
  • .any(axis=1):按行(axis=1表示行方向)进行判断,只要这一行有一个True(也就是有一个NaN),就返回True;如果一行全是False(没有NaN),则返回False
  • .sum():统计所有True的数量,也就是我们要的含NaN的行数

所以正确的Rower函数实现如下:

import pandas as pd
import numpy as np  # 因为你用到了np.random.randn生成数据,所以需要导入这个库

def Rower(df):
    # 判断每行是否存在NaN,再统计符合条件的行数
    return df.isna().any(axis=1).sum()

第三步:结合你的示例代码测试函数

我们用你提供的示例DataFrame来测试这个函数,看看效果:

# 创建原始随机DataFrame
df = pd.DataFrame(
    np.random.randn(6,4),
    index=[1,2,3,4,5,6],
    columns=['A','B','C','D']
)
# 将DataFrame中小于等于0的值替换为NaN(这就是你定义的example_df)
example_df = df[df>0]

# 调用Rower函数统计含NaN的行数
print(Rower(example_df))

核心逻辑逐行解释

  1. df.isna():生成一个和原DataFrame形状完全一致的布尔型DataFrame,每个位置标记该元素是否为NaN。
  2. .any(axis=1):对每一行进行布尔判断,只要该行存在至少一个True(即存在NaN),就返回True;反之返回False。这一步会得到一个布尔型Series,索引和原DataFrame保持一致。
  3. .sum():在pandas中,布尔值True会被当作数值1,False当作0,所以sum()会直接计算出所有True的数量,也就是我们需要的包含NaN值的行数。

和你原有代码的区别

你原来的df.isna().sum().sum()是先按列统计每列的NaN数量(第一个sum()),然后把所有列的统计结果相加(第二个sum()),得到的是整个DataFrame中NaN的总个数,和我们要统计的「含NaN的行数」完全不是一回事哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:02:46