使用python,有些不对劲。
resource1 #"dataframe"
和
resource1.loc[(resource1["code"] == ""), "code"] = "nocode"
然后,错误信息就在这里。
〜/ anaconda3 / LIB / python3.6 /站点包/大熊猫/核心/ indexing.py:537: SettingWithCopyWarning:尝试在a的副本上设置值 从DataFrame切片。尝试使用.loc [row_indexer,col_indexer] = 值而不是请参阅文档中的警告: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj [item] = s
代码有什么问题?
答案 0 :(得分:0)
如果您是从其他来源创建resource1的,例如:
# original DattaFrame
resource = pd.DataFrame({'code':['aaa', "", 'bb', 'nbn']})
# new DataFrame
resource1 = resource[resource['code'].str.len()<3]
您收到警告消息(但 resource1 已被修改)。原因可能是 resource1 是作为 resource 的过滤器创建的,目前尚不清楚它是否返回copy或view-引用了 resources 的新变量(有关更多详细信息,请参见此mypy)。为了避免这种情况,您可以使用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