我正在尝试通过逻辑条件更新熊猫数据框,但是由于以下错误而失败,

df[df.b <= 0]['b'] = 0


A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

我该如何工作?

数据:

df = pd.DataFrame({'a': np.random.randn(4), 'b': np.random.randn(4)})
    a           b
0   1.462028    -1.337630
1   0.206193    -1.060710
2   -0.464847   -1.881426
3   0.290627    0.650805


我正在学习熊猫。在R中,语法如下所示,

df[df$b <= 0]$b <- 0

最佳答案

使用

df.loc[df.b <= 0, 'b']= 0


为了提高效率,熊猫仅从以前的DataFrame创建引用,而不是每次应用过滤器时都创建新的DataFrame。
因此,当您为DataFrame分配一个值时,需要在源DataFrame中更新它(而不仅仅是它的当前片段)。这就是警告中提到的内容


  试图在DataFrame的切片副本上设置一个值。尝试改用.loc [row_indexer,col_indexer] = value


为避免这种情况,使用了.loc语法。

有关DataFrame indexing的更多信息

关于python - 根据条件更新 Pandas 数据框的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33274628/

10-16 02:39