2

使用python,有问题。

 resource1   #"dataframe"

和,

resource1.loc[(resource1["code"] == ""), "code"] = "nocode"

然后,错误信息就在这里。

~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:537:SettingWithCopyWarning:试图在数据帧的切片副本上设置值。尝试改用 .loc[row_indexer,col_indexer] = value 查看文档中的注意事项:http: //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj[项目] = s

代码有什么问题?

4

1 回答 1

2

如果您从另一个来源创建了 resource1,例如:

# original DattaFrame
resource = pd.DataFrame({'code':['aaa', "", 'bb', 'nbn']})
# new DataFrame 
resource1 = resource[resource['code'].str.len()<3]

您会收到警告消息(但resource1已被修改)。原因可能是resource1是作为资源的过滤器创建的,并且不清楚它是否返回副本或视图 - 对资源的引用而不是新变量(有关更多详细信息,请参阅此链接)。为避免这种情况,您可以使用 deepcopy 功能

import copy
resource1 = copy.deepcopy(resource[resource['code'].str.len()<3])

这可以安全地创建带有过滤数据和您的代码的全新 DataFrame

resource1.loc[(resource1["code"] == ""), "code"] = "nocode"

将毫无警告地工作。

或者您可以禁用链式分配以达到相同的效果(但警告不仅令人讨厌,因此请仔细考虑该选项...)

pandas.options.mode.chained_assignment = None
于 2019-09-10T15:46:20.223 回答