Ошибка говорит об этом.Ваш df
- это фрагмент другого кадра df=df[mask]
.Попробуйте обновить оригинальный кадр, а не срез:
def cleanup(df: pd.DataFrame) -> pd.DataFrame:
# Remove entries from the IT dept
mask1 = (df['dept'] != 'IT')
# Rename the dept from marketing to comms for the remaining rows
mask2 = df['dept'] == 'marketing'
df.loc[mask1 & mask2, 'dept'] = "comms"
# The warning occurs here...
# Rename the dept from accounting to finance for the remaining rows
mask2 = df['dept'] == 'accounting'
df.loc[mask1&mask2, 'dept'] = 'finance'
return df
data = [[1,"marketing"],[2,"accounting"],[3,"marketing"],[4,"IT"],[5,"IT"],[6,"board"]]
df = pd.DataFrame(data, columns = ['id', 'dept'])
df=cleanup(df)
Измененная функция возвращает новые df
со значениями IT
в dept
.Если, на самом деле, вам не нужны эти записи, вы можете сделать копию и обновить это:
def cleanup(df: pd.DataFrame) -> pd.DataFrame:
# Remove entries from the IT dept
mask = (df['dept'] != 'IT')
# we copy the data frame here so it's no longer a slice
df = df[mask].copy()
# Rename the dept from marketing to comms for the remaining rows
mask = df['dept'] == 'marketing'
df.loc[mask, 'dept'] = "comms"
# The warning occurs here...
# Rename the dept from accounting to finance for the remaining rows
mask = df['dept'] == 'accounting'
df.loc[mask, 'dept'] = 'finance'
return df