Правильный способ установить новый столбец в 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 предназначен для поймать! Панды, вероятно, пытаются предупредить вас, что вы сделали это:

затем документы дают пример того, когда можно получить эту ошибку, даже если она не ожидается. Поэтому я не могу сказать, почему это происходит без дополнительного контекста.