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 15:30:46 浏览: 80
你在使用`.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警告。
df_train = df_log.iloc[ : -test_size] df_test = df_log.iloc[-test_size : ] df_train.shape,df_test.shape
这段代码是将数据集按照测试集大小(test_size)的比例拆分成训练集(train)和测试集(test)两部分,并分别赋值给 df_train 和 df_test 两个变量。
其中 df_log 是原始数据集, iloc[] 是 Pandas 中的索引方式,[ : -test_size] 表示选取从第 0 行到倒数第 test_size 行的数据作为训练集,[-test_size : ] 表示选取从倒数第 test_size 行到最后一行的数据作为测试集。
最后, df_train.shape 和 df_test.shape 分别输出训练集和测试集的维度信息,即行数和列数。
阅读全文