使用字典映射时,SettingWithCopyWarning

时间:2019-06-18 15:27:54

标签: python python-3.x pandas dataframe

我目前正在尝试了解此警告:

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

我在SO上看到了很多,但是尝试映射时出现了我的问题。

我的代码是这样的:

def merger(df):

     qdf = pd.read_csv('domains_only_df.csv')

     unfilt_rel_domains = qdf[['name', 'hits', 'owner', 'curated', 'domain']].copy()
     rel_domains = unfilt_rel_domains[unfilt_rel_domains['curated'] == 0]

     hits_dict= pd.Series(rel_domains.hits.values, index=rel_domains.owner).to_dict()

     name_dict = pd.Series(rel_domains.name.values, index=rel_domains.owner).to_dict()

     domain_dict = pd.Series(rel_domains.domain.values, index=rel_domains.owner).to_dict()

     df['Hits'] = df['eid'].map(hits_dict).fillna(0)
     df['Existing_domain'] = df['eid'].map(name_dict).fillna(0)
     df['idn'] = df['eid'].map(domain_dict).fillna(0)

return df

错误发生在.map()上,我的问题是如何使用警告的建议使用.loc[row_indexer,col_indexer] = value来编写映射?我需要.map()来提高速度和进行查询,但是我不确定如何避免此警告。

1 个答案:

答案 0 :(得分:0)

字面上是一个班轮:

在做任何事情之前:设置 c3a9来获取实际视图,而不是在另一个副本上醒来。