当前位置: 首页 > 面试题库 >

使用iloc时,“试图从DataFrame的切片副本上设置一个值”错误

柳晔
2023-03-14
问题内容

Jupiter Nootbook返回此警告:

*C:\anaconda\lib\site-packages\pandas\core\indexing.py:337: 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

请参阅文档中的警告:http :
//pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-
copy

self.obj[key] = _infer_fill_value(value)
C:\anaconda\lib\site-packages\pandas\core\indexing.py:517: 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

请参阅文档中的警告:http :
//pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-
copy

self.obj[item] = s*

运行以下代码后:

def group_df(df,num):
    ln = len(df)
    rang = np.arange(ln)
    splt = np.array_split(rang,num)
    lst = []
    finel_lst = []
    for i,x in enumerate(splt):
        lst.append([i for x in range(len(x))])
    for k in lst:
        for j in k:
            finel_lst.append(j)
    df['group'] = finel_lst
    return df
def KNN(dafra,folds,K,fi,target):        
    df = group_df(dafra,folds)
    avarge_e = []
    for i in range(folds):
        train = df.loc[df['group'] != i]
        test = df.loc[df['group'] == i]
        test.loc[:,'pred_price'] = np.nan
        test.loc[:,'rmse'] = np.nan
        print(test.columns)
KNN(data,5,5,'GrLivArea','SalePrice')

在错误消息中,建议使用.loc索引编制(我这样做了,但没有帮助)。请帮助我-什么问题?我已经解决了相关问题并阅读了文档,但是我仍然不明白。


问题答案:

我认为您需要copy

train = df.loc[df['group'] != i].copy()
test = df.loc[df['group'] == i].copy()

如果test稍后再修改值,您会发现修改不会传播回原始数据(df),并且Pandas会发出警告。



 类似资料:
  • 我知道有很多关于这个警告的帖子,但是我找不到解决我的问题的办法。这是我的密码: 它产生警告: SettingWithCopyWarning:试图在数据帧切片的副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value 即使我按照建议更改了代码,我仍然收到此警告?我所需要做的就是转换一列的数据类型。 **备注:**最初该列是具有一个十进制的浮点数类型(例如:

  • 问题内容: 我有一个小数据框,说这个: 我想要column的滚动平均值,所以我这样做: 它的工作方式如下:我有一个新的列,该列包含我希望包含的内容,但我也收到警告消息: 试图在DataFrame的切片副本上设置一个值。尝试改用.loc [row_indexer,col_indexer] = value 请参阅文档中的警告:http : //pandas.pydata.org/pandas-docs

  • 我试图初始化实例和传递数据帧但出于某种原因我得到的输出 尝试使用。loc[row\u indexer,col\u indexer]=改为value 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-vs-a-copy self。x[‘截距’]=1 知道我

  • 运行以下代码时: 我得到以下警告: 正在尝试在DataFrame的切片副本上设置值。尝试使用. loc[row_indexer,col_indexer]=value来代替查看留档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 但这正是我想要的行为(真实的表非常大,我不想

  • 我有一个小数据框,比如说: 我想有一个列的滚动平均值,所以我这样做: 它的工作原理是,我有一个名为的新列,其中包含我期望它包含的内容,但我也会收到警告消息: 试图在数据帧切片的副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/index

  • 问题内容: 我也有类似的问题,这个。区别在于我必须按位置选择行,因为我不知道索引。 我想做类似的事情,但是iloc不允许这种访问。如果执行此操作,则会出现有关链接索引的警告。 问题答案: 对于混合位置和索引,请使用。但是您需要确保索引不是整数,否则会引起混乱。 更新: 或者,尝试 例: