Pandas:更改由列中的布尔索引选择的值,而不会收到警告

Khr*_*ris 6 python indexing conditional-statements python-2.7 pandas

我有一个数据框,我想只更改另一列满足某个条件的列的值.我正试图这样做iloc,它要么不起作用,要么我得到那个恼人的警告:

尝试在DataFrame的切片副本上设置值

例:

import pandas as pd
DF = pd.DataFrame({'A':[1,1,2,1,2,2,1,2,1],'B':['a','a','b','c','x','t','i','x','b']})
Run Code Online (Sandbox Code Playgroud)

做其中一个

DF['B'].iloc[:][DF['A'] == 1] = 'X'

DF.iloc[:]['B'][DF['A'] == 1] = 'Y'
Run Code Online (Sandbox Code Playgroud)

工作,但导致上面的警告.

这个也发出警告,但不起作用:

DF.iloc[:][DF['A'] == 1]['B'] = 'Z'
Run Code Online (Sandbox Code Playgroud)

我真的很困惑如何使用loc,ilocix右边做布尔索引,也就是说,如何以正确的顺序和正确的语法提供行索引,列索引和布尔索引.

有人可以为我清除这个吗?

piR*_*red 8

你是链接你的选择者,导致警告.将选择合并为一个.
loc改用

DF.loc[DF['A'] == 1, 'B'] = 'X'
DF
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述