Python 使用inplace时设置WithCopy错误=True
在运行以下代码时,我正在使用Copy Warning进行设置:Python 使用inplace时设置WithCopy错误=True,python,pandas,Python,Pandas,在运行以下代码时,我正在使用Copy Warning进行设置: expNo = 1 file = pd.read_csv(file_name) data = file[file['valid_data']==1] data.rename(columns={'time':'delay'},inplace=True) data['delay'].replace([199, 299, 399], [200, 300, 400], inplace=True) data = data[['work','d
expNo = 1
file = pd.read_csv(file_name)
data = file[file['valid_data']==1]
data.rename(columns={'time':'delay'},inplace=True)
data['delay'].replace([199, 299, 399], [200, 300, 400], inplace=True)
data = data[['work','delay','answer','actual']]
if expNo == 1:
data['prob'] = 50
if expNo ==2:
data['prob'] = 75
prob不是csv文件中的字段,因此它被附加到文件中
谁能解释一下这里出了什么问题吗?当我学习熊猫时,我从未犯过这样的错误。这里的问题是这个。首先,将数据读入名为“文件”的文件中。然后将“文件”DF子集为“数据”DF。然后修改“数据”。“数据”DF实际上是“文件”DF的视图。因此,您最终修改了“文件”DF的一部分。消除警告的一种方法是在第3行末尾附加“copy”:
data = file[file['valid_data']==1].copy()
这将创建一个独立于“文件”DF的“数据”DF。作为一个次要的吹毛求疵,我建议对您的DF使用更具描述性的名称
自足的代码片段(在以后的问题中非常受欢迎)如下所示:
import pandas as pd
file = pd.DataFrame([{'time': 199, 'work': 'a', 'answer': 'b', 'actual': 'a', 'valid_data': 1}, {'time': 299, 'work': 'a', 'answer': 'c', 'actual': 'a', 'valid_data': 0}, {'time': 300, 'work': 'a', 'answer': 'd', 'actual': 'a', 'valid_data': 1}])
data = file[file['valid_data']==1]
data.rename(columns={'time':'delay'}, inplace=True)
以上将给你一个警告
import pandas as pd
file = pd.DataFrame([{'time': 199, 'work': 'a', 'answer': 'b', 'actual': 'a', 'valid_data': 1}, {'time': 299, 'work': 'a', 'answer': 'c', 'actual': 'a', 'valid_data': 0}, {'time': 300, 'work': 'a', 'answer': 'd', 'actual': 'a', 'valid_data': 1}])
data = file[file['valid_data']==1].copy()
data.rename(columns={'time':'delay'}, inplace=True)
以上内容不会向您发出警告。什么是
有效的
?对不起,这是数据,忘记编辑了。请仔细检查您的代码。在第3行添加.copy()后,警告消失了。
import pandas as pd
file = pd.DataFrame([{'time': 199, 'work': 'a', 'answer': 'b', 'actual': 'a', 'valid_data': 1}, {'time': 299, 'work': 'a', 'answer': 'c', 'actual': 'a', 'valid_data': 0}, {'time': 300, 'work': 'a', 'answer': 'd', 'actual': 'a', 'valid_data': 1}])
data = file[file['valid_data']==1].copy()
data.rename(columns={'time':'delay'}, inplace=True)