Неожиданная настройкаWithCopyWarning: - PullRequest
0 голосов
/ 06 апреля 2019

Я использую код, который изменяет значения в пределах определенного порога в кадре данных. Я получаю предупреждение, что на поверхности не кажется оправданным:

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

Мой код уже использует присвоение .loc[row,column], поэтому я не понимаю, почему предупреждение предполагает это.

import pandas as pd
#pd.options.mode.chained_assignment = None #disable warning 
#pd.set_option('mode.chained_assignment','warn')#or "warn" or "raise"
u = (df 
# Group all forecasts together
     .groupby(by="forecast_id",  sort=False)
# modify only forecasts groups that have smallest value = 0 
     .filter(lambda x: x.value.min() == 0, dropna=False)
# transform values according to a function
     .value.transform( lambda x: (x+0.005).where(x == 0, x-0.005) ) 
     )
# replace the column in the dataframe with the new values except those unaffected
df.loc[pd.notnull(u), "value"] = u

Другое поведение, которое я не мог объяснить, состоит в том, что, поскольку я играл с параметрами предупреждения, после того, как я установил Предупреждение на None, даже если я сбросил его на "warn", предупреждение больше не появляется. Примечание: мой код используется как функция.


Редактировать

Описание того, что делает код, а также пример, приведено в ссылке вверху; Тем не менее, мое внимание здесь сосредоточено на понимании того, почему в предупреждении предлагается реализация, которая уже реализована: Панды - вычисление нового значения на основе перекрестной ссылки с другим столбцом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...