我的代码出现了警告:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame。请帮我找出问题出在哪以及怎么修改。代码如下:for key in fill_dic.keys(): if len(fill_dic[key]) == 1: # 若只匹配上了一个属性 for idx in list(df_feat.index): if df_feat.iloc[idx][key] == df_feat.iloc[idx][key]: # 若原属性是空,填充 df_feat.iloc[idx][key] = df_ner.iloc[idx][fill_dic.get(key)] else: # 若匹配上了多个属性 ner_filt = df_ner[fill_dic.get(key)] # 每行+多匹配上的属性列 for idx in list(df_feat.index): if df_feat.iloc[idx][key] == df_feat.iloc[idx][key]: # 若原属性是空,填充 for idy in range(len(fill_dic.get(key))): if ner_filt.iloc[idx, idy] == ner_filt.iloc[idx, idy]: # 若True则该标题属性不为NaN df_feat.iloc[idx][key] = ner_filt.iloc[idx, idy]
时间: 2024-04-13 19:29:56 浏览: 102
SIP错误代码大全
这个警告通常是因为在对DataFrame进行切片操作时,尝试对切片进行赋值操作,而切片返回的是原DataFrame的一个视图,而不是副本。为了避免这个警告,你可以使用`.loc`或`.iloc`来进行赋值操作。
在你的代码中,可以通过使用`.loc`来避免这个警告。具体修改如下:
```python
for key in fill_dic.keys():
if len(fill_dic[key]) == 1:
df_feat.loc[df_feat[key].isnull(), key] = df_ner[fill_dic[key]].values
else:
ner_filt = df_ner[fill_dic[key]]
for idx in list(df_feat.index):
if df_feat.loc[idx, key] == df_feat.loc[idx, key]:
for idy in range(len(fill_dic[key])):
if ner_filt.loc[idx, idy] == ner_filt.loc[idx, idy]:
df_feat.loc[idx, key] = ner_filt.loc[idx, idy]
```
使用`.loc`可以直接对选定的行和列进行赋值操作,避免了SettingWithCopyWarning警告。
阅读全文