Как исправить это предупреждение в pandas?
Написал код:
OverAll = []
courses = df[['Math_PassStatus', 'Reading_PassStatus', 'Writing_PassStatus']]
for val in courses.values:
if 'F' not in val:
OverAll.append('P')
else:
OverAll.append('F')
courses['OverAll_PassStatus'] = OverAll
print(f"Экзамен сдали {courses.OverAll_PassStatus.value_counts()['P']} человек")
Предупреждение:
C:\Users\Oskarr\AppData\Local\Temp/ipykernel_9044/4146853526.py:12: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
courses['OverAll_PassStatus'] = OverAll
Понимаю, что нужно использовать .loc, но где именно - нет. Только начинаю изучать pandas.
Ответы (1 шт):
courses = df[['Math_PassStatus', 'Reading_PassStatus', 'Writing_PassStatus']]
...
courses['OverAll_PassStatus'] = OverAll
courses - это некий срез датафрейма df, в этом проблема. Методы решения могут быть разные, например, если courses будет и дальше независимым датафреймом, то лучше явно сказать, что это нормальная копия выборки из исходного датафрейма, предупреждение должно исчезнуть:
courses = df[['Math_PassStatus', 'Reading_PassStatus', 'Writing_PassStatus']].copy()
^^^^^^^
К сожалению, предупреждения не всегда чётко подсказывают, что нужно делать. Но суть тут передана верно - вы присваиваете что-то выборке из датафрейма, это не есть хорошо.
Другой вариант избавиться от предупреждения - добавить новую колонку в исходный датафрейм и использовать дальше его:
df['OverAll_PassStatus'] = OverAll
print(f"Экзамен сдали {df.OverAll_PassStatus.value_counts()['P']} человек")