Как изменить значения в 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 шт):
Автор решения: 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.