Как установить значения столбца с помощью .loc и .contains

Обе функции .loc и .contains возвращают объект dataframe. В документации pandas указано, что для переназначения значения каждой строке в столбце я должен использовать .loc, но в сочетании с .contains я получаю это предупреждение:

Пытается установить значение для копии фрагмента из DataFrame. Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value См. предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-копировать

Однако процесс работает, и я получаю желаемое переназначение значения для каждой строки в столбце фрейма данных. Как избежать этого предупреждения?

#works
df.loc[df["matchType"]=='duo',["matchType"]]='duo'

#warning thrown but still works
df.loc[df["matchType"].str.contains('duo'),["matchType"]]='duo'

person Bugbeeb    schedule 14.04.2019    source источник
comment
Я не могу воспроизвести проблему. Ни один из операторов присваивания не выдает никаких предупреждений, когда я их запускаю (используя версию pandas 0.24.2).   -  person Xukrao    schedule 15.04.2019
comment
Эта ссылка поможет. Окончательная причина, по которой возникает SettingWithCopyWarning, вероятно, связана с более ранней строкой кода; сам по себе этот фрагмент не должен вызывать проблем.   -  person gmds    schedule 15.04.2019


Ответы (1)


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

df.loc[(df['matchType'].str.contains('solo')==False) & 
(df['matchType'].str.contains('duo')==False),"matchType"]="other"
-->
df.loc[df['matchType'].str.contains('solo|duo')==False),"matchType"]="other"
person Bugbeeb    schedule 15.04.2019