熊猫的applymap函数在应用于太多列时会删除行?

时间:2018-12-13 02:07:45

标签: python pandas

我有一个数据框,我希望在该数据框中使用即将出现的第一行来回填所有NaN值。我现在的代码是这样:

df[df.applymap(np.isfinite).all(1)]

当我将数据框减少到7列或更少时,此方法有效。但是,当我尝试在具有更多列的数据框上运行此命令时,我返回了一个仅包含列标题的空数据框。

这是怎么回事?我的数据框有800行。

2 个答案:

答案 0 :(得分:1)

这完全是您在all条件下应该得到的。考虑这个最小的例子:

df = pd.DataFrame([[1, 2, np.inf],
                   [4, np.inf, 6]])

res1 = df[df.iloc[:, :2].applymap(np.isfinite).all(1)]  # test first 2 columns only
res2 = df[df.applymap(np.isfinite).all(1)]              # test all columns

print(len(res1.index))  # 1
print(len(res2.index))  # 0

df.iloc[:, :2]过滤器仅用于前两列,并且很明显,第一行将保留。而在第二种情况下,由于考虑了 all 列,因此排除了两行。

顺便说一句,在这种情况下,np.isfinite(df).all(1)更为惯用:您不必通过applymap对每个值分别应用运算。

答案 1 :(得分:0)

让我们在这里查看您的代码。 df.applymap(np.isfinite).all(1)是一个具有与原始数据帧相同的索引的序列,并且每个元素都是True或False,这取决于所有列是否为有限列。您可以将此系列用作屏蔽来过滤原始数据帧。如果结果数据框为空,则表示您的序列充满了错误。换句话说,每一行都有至少一个不是有限的值。