df_feat.iloc[9]['id2694_feat17'] = df_ner.iloc[9][fill_dic.get('id2694_feat17')].values这一句为什么写错了,报了警告SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
时间: 2024-04-13 07:30:46 浏览: 68
你在使用`.iloc`进行赋值操作时出现了警告。这个警告通常是由于对切片返回的视图进行了赋值操作,而不是对原始DataFrame进行的。为了避免这个警告,你可以使用`.loc`来进行赋值操作。
你可以将代码修改如下:
```python
df_feat.loc[9, 'id2694_feat17'] = df_ner.loc[9, fill_dic.get('id2694_feat17')]
```
使用`.loc`来直接对选定的行和列进行赋值操作,避免了SettingWithCopyWarning警告。请确保你的`df_feat`和`df_ner`都是正确的DataFrame对象,并且'9'和'fill_dic.get('id2694_feat17')'分别表示行索引和列索引。
相关问题
我的代码出现了警告: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]
这个警告通常是因为在对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警告。
train_feat1 = train_feat.iloc[train_index]
这段代码是在从 pandas.DataFrame 类型的 train_feat 变量中选择一部分数据,并将其赋值给 train_feat1 变量。其中,train_index 是一个指定了要选择哪些数据的索引列表,这些索引对应了 train_feat 中的行。具体来说,train_feat1 是 train_feat 中所有在 train_index 列表中的行所组成的新的 DataFrame 对象。这种操作常用于数据集划分,比如将数据集划分成训练集和测试集。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)