You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复「A value is trying to be set on a copy of a slice from a DataFrame」警告

修复「A value is trying to be set on a copy of a slice from a DataFrame」警告

问题根源

你代码里的data = data[['Question', 'Triplet', 'Answer']]和data = data[data['valid_sample'] == True]都是切片操作,Pandas返回的可能是原DataFrame的视图而非独立副本,后续给data新增Input、Entity列时,就会触发这个警告。

具体修复步骤

1. 显式创建副本,切断视图关联

在两次切片操作后加上.copy(),让data成为独立的DataFrame:

data = pd.read_csv('data/recheck_data.csv')
# 第一次切片后加copy()
data = data[['Question', 'Triplet', 'Answer']].copy() 
data.dropna(inplace=True)

def valid_sample(item):
    # DO THINGS
    if item:
        return False
    return True 

data['valid_sample'] = data['Triplet'].apply(lambda x: valid_sample(x))
# 第二次布尔索引后加copy()
data = data[data['valid_sample'] == True].copy() 

2. 优化元组列拆分代码(可选,更高效)

你原来用循环iloc取元组元素的写法可以简化,直接用pd.DataFrame转换结果,再合并到原DataFrame:

def process_sub_graph(sub_graph: str):
    # DO SOMETHING
    return input_val, entity_val 

result = data['Triplet'].apply(process_sub_graph)
# 直接把元组列表转成DataFrame,自动拆分列
result_df = pd.DataFrame(result.tolist(), columns=['Input', 'Entity'])
# 合并到原data
data = pd.concat([data, result_df], axis=1)

这样既避免了循环的低效,也能更规范地处理列赋值。

额外说明

如果不想用concat,也可以直接拆分赋值,只要data已经是副本,就不会触发警告:

data['Input'] = [x[0] for x in result]
data['Entity'] = [x[1] for x in result]

(比用iloc[i]更简洁)

内容的提问来源于stack exchange,提问作者tjns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:26:15