繁体   English   中英

为什么这个 Python 熊猫代码不能在我的数据集上运行?

[英]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很好,就像兄弟回答说的那样。

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

我建议如下:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM