当前位置: 代码迷 >> python >> 根据条件更新熊猫数据框的值
  详细解决方案

根据条件更新熊猫数据框的值

热度:25   发布时间:2023-06-13 16:54:06.0

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

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语法。

有关更多信息

尝试这个:

>>> df.ix[df['b']<=0] = 0
>>> df
      a         b
0  0.000000  0.000000
1  0.000000  0.000000
2  0.212535  0.491969
3  0.000000  0.000000

注意:由于v0.20 ix已被弃用。 请改用lociloc

按照以下模式更新值-

food_reviews_df.loc[food_reviews_df.Score <= 3, 'Score'] = 0
food_reviews_df.loc[food_reviews_df.Score >= 4, 'Score'] = 1
  相关解决方案