Правильный способ установить новый столбец в Pandas DataFrame, чтобы избежать SettingWithCopyWarning
попытка создать новый столбец в netc df, но я получаю предупреждение
netc["DeltaAMPP"] = netc.LOAD_AM - netc.VPP12_AM
C:Anacondalibsite-packagesipykernel__main__.py:1: 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
Как правильно создать поле в новой версии панды, чтобы избежать предупреждения?
pd.__version__
Out[45]:
u'0.19.2+0.g825876c.dirty'
1 ответов
как говорится в ошибке, попробуйте использовать .loc[row_indexer,col_indexer]
для создания нового столбца.
netc.loc[:,"DeltaAMPP"] = netc.LOAD_AM - netc.VPP12_AM.
Примечания
на Документы Индексирования Панд ваш код должен работать.
netc["DeltaAMPP"] = netc.LOAD_AM - netc.VPP12_AM
переводится на
netc.__setitem__('DeltaAMPP', netc.LOAD_AM - netc.VPP12_AM)
что должен иметь предсказуемое поведение. The SettingWithCopyWarning
существует только для предупреждения пользователей о неожиданном поведении во время цепного назначения (что не то, что вы делаете). Однако, как упоминалось в документах,
иногда
SettingWithCopy
предупреждение будет возникать время от времени, когда нет очевидной цепной индексации. Это ошибки, которыеSettingWithCopy
предназначен для поймать! Панды, вероятно, пытаются предупредить вас, что вы сделали это:
затем документы дают пример того, когда можно получить эту ошибку, даже если она не ожидается. Поэтому я не могу сказать, почему это происходит без дополнительного контекста.