python - pandas的链式索引
问题描述
根据以下文章,view
共享内存,因此无论警告消息如何,都必须更改原始数据。
df["b":"d"]["z"] = 0
这反映了您迄今为止在本文中看到的行为。df["b":"d"] 返回一个视图并允许您修改原始数据。这就是赋值 df["b":"d"]["z"] = 0 成功的原因。请注意,在这种情况下,无论是否成功更改 df,您都会收到 SettingWithCopyWarning。
如果范围切片(iloc[0:2]
)应用于具有所有整数列的数据帧,则返回视图。视图需要修改C
列,但在下面的示例中不起作用..
data = np.arange(9).reshape(3, 3)
index = ["1/1", "1/2", "1/3"]
columns = ["A", "B", "C"]
df = DataFrame( data, index, columns)
df.iloc[0:2]['C'] = 1000
print(df)
A B C
1/1 0 1 2
1/2 3 4 5
1/3 6 7 8
我不确定与文章中的解释有什么不同。
解决方案
带循环,可以改变它。
data = np.arange(9).reshape(3, 3)
index = ["1/1", "1/2", "1/3"]
columns = ["A", "B", "C"]
df = pd.DataFrame(data, index, columns)
for i in range(len(index)):
df.iloc[i]["C"] = 1000
print(df)