如何在Mann-whitney u测试的数据框中忽略NaN?

问题描述 投票:1回答:2

我有一个数据框如下。

enter image description here

我希望通过比较每一列来测试Mann-whitney u测试的p值。作为一个例子,我在下面尝试过。

from scipy.stats import mannwhitneyu
mannwhitneyu(df['A'], df['B'])

这导致以下值。

MannwhitneyuResult(statistic=3.5, pvalue=1.8224273379076809e-05)

我想知道NaN是否影响了结果,因此我制作了以下df2df3数据帧,如图所示并尝试如下。

mannwhitneyu(df2, df3)

这导致了

MannwhitneyuResult(statistic=3.5, pvalue=0.00025322465545184154)

所以我认为NaN值会影响结果。有谁知道如何忽略数据帧中的NaN值?

enter image description here

python pandas static scipy nan
2个回答
2
投票

你可以使用df.dropna(),你可以在这里找到dropna的大量文档

根据您的示例,语法将如下所示:

mannwhitneyu(df['A'].dropna(),df['B'])

0
投票

正如您所看到的,mannwhitneyu函数中没有参数允许您在遇到NaN值时指定其行为,但是如果您检查其source code,您可以看到它在计算某些值时不考虑NaN值。关键值(n1n2ranked等)。这让我怀疑在缺少某些输入值时会得到的任何结果。如果你不想用NaN-ignoring功能自己实现这个功能,那么最好的办法就是创建新的数组,而不是像你那样缺少值,或者按照另一个答案的建议使用df['A'].dropna()

© www.soinside.com 2019 - 2024. All rights reserved.