使用python时,出现了一些问题。
resource1 #"dataframe"和,
resource1.loc[(resource1["code"] == ""), "code"] = "nocode"那么,错误消息就在这里。
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:537: SettingWithCopyWarning:一个值试图在来自DataFrame的片的副本上设置。尝试使用.locrow_indexer,col_indexer = value,请参阅文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.objitem =s
密码怎么了?
发布于 2019-09-10 15:46:20
如果您从另一个源创建了resource1,例如:
# original DattaFrame
resource = pd.DataFrame({'code':['aaa', "", 'bb', 'nbn']})
# new DataFrame
resource1 = resource[resource['code'].str.len()<3]您将收到警告消息(但resource1已被修改)。原因可能是resource1是作为资源筛选器创建的,并且不清楚它是返回复制还是返回视图--这是对资源的引用,而不是新变量(有关更多细节,请参见此链接 )。为了避免这种情况,您可以使用深度复制函数。
import copy
resource1 = copy.deepcopy(resource[resource['code'].str.len()<3])这可以安全地使用过滤过的数据和代码创建全新的DataFrame。
resource1.loc[(resource1["code"] == ""), "code"] = "nocode"会在没有警告的情况下工作。
或者您可以禁用链式赋值以达到相同的目的(但是警告不仅仅是指定的,所以仔细考虑一下.)
pandas.options.mode.chained_assignment = Nonehttps://stackoverflow.com/questions/50038081
复制相似问题