今天碰到一个异常怪异的问题,关于DataFrame设置值不成功的问题。
以往设置值,像下面这样的代码都是可以成功赋值修改
df.iloc[3]['B'] = df2.iloc[-1]['H']
但是今天使用的一个复杂数据,在类似的代码下,竟然死活不能赋值修改,还报WARNING。
特别奇怪的是,说我尝试给一个切片的复制赋值。本来还以为是自己代码写错了,毕竟Dataframe各种括号很容易写错位置,检查了好久,觉得没问题,就点进了报错给出的链接http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 。然后就解决了问题,简直是太贴心了。
注意到上图的WARNING:被设置操作所返回的,无论是拷贝还是引用,都有可能会依赖上下文。这种被叫做链式赋值的情况应该被避免。隐隐感觉到自己今天的复杂数据操作是链式赋值,所以点进去链接继续看。
发现了没,本来以为同样的操作竟然得到的数据 名称是不一样的。这就是官方说的链式赋值的情况吧。具体可以大家自己去链接看。
继续往下看,发现了官方坑爹的说法。
看到没!官方说没人能知道,他们也不知道!玄学敲代码阿这是
所以,官方建议的操作是改iloc为loc。
df.iloc[3]['B'] = df2.iloc[-1]['H'] ——> df.loc[3, 'B'] = df2.iloc[-1]['H']
踩坑结束,小伙伴们引以为鉴。