Ошибка SettingWithCopy при использовании inplace = True - PullRequest
0 голосов
/ 20 октября 2019

Я получаю предупреждение SettingWithCopy при выполнении следующего кода:

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, поэтому он добавляется в файл.

Может кто-нибудь пожалуйстаобъясните мне, что здесь не так? когда я изучал панд, у меня никогда не было таких ошибок.

1 Ответ

0 голосов
/ 20 октября 2019

Проблема здесь в следующем. Во-первых, вы читаете свои данные в панду DF, называемую «файл». Затем вы помещаете DF «файл» в DF «данные». Затем вы изменяете «данные». DF «данных» на самом деле является представлением «файла» DF. Таким образом, вы в конечном итоге модифицируете часть своего «файлового» DF. Одним из способов избавиться от предупреждения является добавление «copy» в конце строки 3:

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)

Выше не будет предупреждать вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...