首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用.loc[row_indexer,col_indexer] = value

尝试使用.loc[row_indexer,col_indexer] = value
EN

Stack Overflow用户
提问于 2018-04-26 08:16:41
回答 1查看 3.3K关注 0票数 2

使用python时,出现了一些问题。

代码语言:javascript
复制
 resource1   #"dataframe"

和,

代码语言:javascript
复制
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

密码怎么了?

EN

回答 1

Stack Overflow用户

发布于 2019-09-10 15:46:20

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

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

您将收到警告消息(但resource1已被修改)。原因可能是resource1是作为资源筛选器创建的,并且不清楚它是返回复制还是返回视图--这是对资源的引用,而不是新变量(有关更多细节,请参见此链接 )。为了避免这种情况,您可以使用深度复制函数。

代码语言:javascript
复制
import copy
resource1 = copy.deepcopy(resource[resource['code'].str.len()<3])

这可以安全地使用过滤过的数据和代码创建全新的DataFrame。

代码语言:javascript
复制
resource1.loc[(resource1["code"] == ""), "code"] = "nocode"

会在没有警告的情况下工作。

或者您可以禁用链式赋值以达到相同的目的(但是警告不仅仅是指定的,所以仔细考虑一下.)

代码语言:javascript
复制
pandas.options.mode.chained_assignment = None
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50038081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档