我已经创建了一个pandas DataFrame
df = DataFrame(np.arange(15).reshape(3,5), columns=['a','b','c', 'd', 'e'])
df a b c d e
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
我想设置特定单元格的值:
flag = df['b'] > 3
df[flag]['b']=10
但没有工作。
df a b c d e
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
我使用以下代码。 它有效,但我不知道为什么?
df['b'][flag] = 10
df a b c d e
0 0 1 2 3 4
1 5 10 7 8 9
2 10 10 12 13 14
答案 0 :(得分:3)
不要使用链式索引来分配值。
而是使用pd.DataFrame.loc
指定行和列:
df.loc[df['b'] > 3, 'b'] = 10
.loc
索引器接受列表,标量或布尔数组。
pandas
docs explain in detail为什么应该避免使用链式索引。