我正在尝试按逻辑条件更新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
答案 0 :(得分:5)
使用
df.loc[df.b <= 0, 'b']= 0
对于效率pandas,只需创建前一个DataFrame的引用,而不是每次应用过滤器时都创建新的DataFrame。
因此,当您为DataFrame分配值时,需要在源DataFrame中更新它(而不仅仅是它的当前切片)。这是警告中提到的内容
正在尝试在DataFrame的切片副本上设置值。尝试使用.loc [row_indexer,col_indexer] = value而不是
要避免使用此.loc
语法。
答案 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
已被弃用。请改用ix
或loc
。
答案 2 :(得分:0)
请按照以下模式更新值-
food_reviews_df.loc[food_reviews_df.Score <= 3, 'Score'] = 0
food_reviews_df.loc[food_reviews_df.Score >= 4, 'Score'] = 1