在条件下更新pandas数据帧的值

时间:2015-10-22 06:27:55

标签: python pandas

我正在尝试按逻辑条件更新pandas数据框但是,它失败并出现以下错误,

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

3 个答案:

答案 0 :(得分:5)

使用

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

对于效率pandas,只需创建前一个DataFrame的引用,而不是每次应用过滤器时都创建新的DataFrame。
因此,当您为DataFrame分配值时,需要在源DataFrame中更新它(而不仅仅是它的当前切片)。这是警告中提到的内容

  

正在尝试在DataFrame的切片副本上设置值。尝试使用.loc [row_indexer,col_indexer] = value而不是

要避免使用此.loc语法。

有关DataFrame indexing

的更多信息

答案 1 :(得分:0)

试试这个:

'

注意:由于v0.20 >>> 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 已被弃用。请改用ixloc

答案 2 :(得分:0)

请按照以下模式更新值-

food_reviews_df.loc[food_reviews_df.Score <= 3, 'Score'] = 0
food_reviews_df.loc[food_reviews_df.Score >= 4, 'Score'] = 1