【问题标题】:Annoy pandas SettingWithCopyWarning, even tried loc[;,]惹恼大熊猫 SettingWithCopyWarning,甚至尝试过 loc[;,]
【发布时间】:2018-10-21 22:36:20
【问题描述】:
code_null.loc[:,'code'] = code_null['blockname'].apply(__f,args=(code_name,))

def __f(x, df):
    #markets = ['A','B']
    markets = ['A']
    for market in markets:
        code = df.loc[df.name==x,'code'].tolist()
    if code:
        return ','.join(code)
    else:
        return np.nan

总是收到SettingWithCopyWarning

.virtualenv/python3/lib/python3.6/site-packages/pandas/core/indexing.py:537: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

也试过了:

 code_null.loc[:,'code'] = code_null.loc[:,'blockname'].apply(__f,args=(code_name,))

但是收到了同样的警告。

【问题讨论】:

  • 我不确定你想做什么,但你试过code_null['code'] = code_null['blockname'].apply(__f,args=(code_name,))吗?

标签: python pandas


【解决方案1】:

尝试使用:

code_null.loc[:,(code)] = code_null[(blockname)].apply(__f,args=(code_name,))

复制方法不是首选:

.copy() 方法无法保证,应根据DOCS 避免使用

文档中的首选方法:

dfc = pd.DataFrame({'A':['aaa','bbb','ccc'],'B':[1,2,3]})

dfc.loc[0,'A'] = 11

dfc
     A  B
0   11  1
1  bbb  2
2  ccc  3

【讨论】:

  • 糟糕,只是为了使用括号,我将进行编辑。能否分享一些样本数据进行测试?
【解决方案2】:
code_null.loc[:,'code'] = code_null['blockname'].apply(__f,args=(code_name,)).copy()

【讨论】:

  • 仍然收到警告“SettingWithCopyWarning”
猜你喜欢
  • 2016-07-03
  • 2018-09-11
  • 2018-12-22
  • 1970-01-01
  • 2014-05-25
  • 2017-12-23
  • 1970-01-01
相关资源
最近更新 更多