Как изменить значения в DataFrame pandas?

Считываю данные из Excel и фильтрую по содержимым ячеек.

x200 = df['Код ответа сервера']=='200 OK'
xp   = df['Код ответа сервера'].isnull()
c1   = df['Content-Type'].str.contains('text/html', na=False)
c2   = df['Content-Type'].isnull()

f1  = df[(x200 | xp)  & (c1|c2) ]

Дальше хочу изменить эти фильтрованные данные. Ошибок нет, но в терминале вижу

A value is trying to be set on a copy of a slice from a DataFrame

И данные не сохраняются. как исправить?*

for i,(index,row) in enumerate(f1.iterrows()):
# for index, row in f1.iterrows():
    u1 = str(row['Уровень 1'])

if u1!='nan':
    f1.loc[index]['URL']=u1
    f1.loc[index]['Title']=u1
    f1.loc[index]['Category']=u1

Ответы (2 шт):

Автор решения: MaxU

Попробуйте так:

f1  = df[(x200 | xp)  & (c1|c2) ].copy()
...
→ Ссылка
Автор решения: CrazyElf

Если пользоваться .loc, то всё должно быть нормально. И не используйте .iterrows обычно без него можно обойтись:

...
u1 = ~df['Уровень 1'].isna()
f1 = df.loc[(x200|xp) & (c1|c2) & u1]
f1['URL'] = f1['Уровень 1']
f1['Title'] = f1['Уровень 1']
f1['Category'] = f1['Уровень 1']

Хотя нужно проверять, может быть нужно будет всё же при присваиваниях использовать .loc, запомнив предварительно битовую маску, а не сразу брать .loc от датафрейма.

Но это всё только если хотите менять именно исходный df, а если хотите копию - см. ответ MaxU.

→ Ссылка