Попробуйте вместо этого использовать.loc[row_indexer,col_indexer] = значение

Используя python, что-то не так.

 resource1   #"dataframe"

а также,

resource1.loc[(resource1["code"] == ""), "code"] = "nocode"

тогда сообщение об ошибке здесь.

~ / anaconda3 / lib / python3.6 / site-packages / pandas / core / indexing.py: 537: SettingWithCopyWarning: значение пытается быть установлено для копии фрагмента из DataFrame. Попробуйте вместо этого использовать.loc[row_indexer,col_indexer] = value. Смотрите предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html self.obj[item] = s

Что не так с кодом?

0 ответов

Если вы создали resource1 из другого источника, например так:

# original DattaFrame
resource = pd.DataFrame({'code':['aaa', "", 'bb', 'nbn']})
# new DataFrame 
resource1 = resource[resource['code'].str.len()<3]

Вы получаете предупреждающее сообщение (но ресурс 1 был изменен). Причина, вероятно, в том, что resource1 создается как фильтр из ресурса, и неясно, возвращает ли он копию или представление - ссылку на ресурсы вместо новой переменной (см. Эту ссылку для более подробной информации). Чтобы избежать этого, вы можете использовать функцию deepcopy

import copy
resource1 = copy.deepcopy(resource[resource['code'].str.len()<3])

Это безопасно создает новый DataFrame с отфильтрованными данными и вашим кодом.

resource1.loc[(resource1["code"] == ""), "code"] = "nocode"

будет работать без предупреждения.

Или вы можете отключить привязанное назначение, чтобы достичь того же (но предупреждения не просто раздражают, поэтому внимательно рассмотрите вариант...)

pandas.options.mode.chained_assignment = None
Другие вопросы по тегам