问题描述
我正在尝试通过逻辑条件更新熊猫数据框,但是由于以下错误而失败,
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
1楼
采用
df.loc[df.b <= 0, 'b']= 0
为了提高效率,熊猫仅从以前的DataFrame创建引用,而不是每次应用过滤器时都创建新的DataFrame。
因此,当您为DataFrame分配一个值时,需要在源DataFrame中更新它(而不仅仅是它的当前片段)。
这就是警告中提到的内容
试图在DataFrame的切片副本上设置一个值。 尝试改用.loc [row_indexer,col_indexer] = value
为了避免这种情况,使用了.loc
语法。
有关更多信息
2楼
尝试这个:
>>> 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
已被弃用。
请改用loc
或iloc
。
3楼
按照以下模式更新值-
food_reviews_df.loc[food_reviews_df.Score <= 3, 'Score'] = 0
food_reviews_df.loc[food_reviews_df.Score >= 4, 'Score'] = 1