Попробуйте вместо этого использовать.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