为什么此 Python pandas 代码不适用于我的数据集?

Why doesn't this Python pandas code work on my dataset?

我是数据科学的新手,在Python中遇到了一个关于pandas的问题。基本上,我想用 0 替换列中低于 0 的值,我想知道为什么这不起作用:

我的数据集的图像:数据集:

原文:

submit[submit.score<0].score = 0

固定:

submit.loc[submit.score<0, 'score'] = 0

我已经使用iloc解决了这个问题,但它真的让我很困惑。任何解释都会很棒。

您的第一次尝试相当于 submit[submit['score'] < 0]['score'] = 0。每当您在 pandas 代码中看到多个 [] 对时,这可能是一个不好的迹象。在这种情况下,使用 submit[submit['score'] < 0] 您正在创建数据框的副本,因此您基本上是将 0 分配给该副本 上的 score,这不会做任何事情。

通过使用 loc,您可以消除副本并直接分配给数据帧。

使用 .loc 很好,就像兄弟回答说的那样。

有时,更好的方法是在创建新对象时使用链接操作,而不是改变另一个对象 in-place。这导致代码易于阅读和遵循。

我建议如下:

submit = submit.assign(score=submit.score.clip(0, None))

它仍然只是一行,但是它创建了一个替换了 score 列的新数据框。 .clip() 方法用于将值限制在一个区间内,在这种情况下,任何小于 0 的值都将为零。

这种风格使得在链中添加更多操作变得容易(其他地方看到的风格)。