Pandas Dataframe Копия предупреждения о срезе - PullRequest
0 голосов
/ 14 ноября 2018

Я довольно новичок в пандах и получал печально известное SettingWithCopyWarning в большом куске кода.Я свел это к следующему:

import pandas as pd
df = pd.DataFrame([[0,3],[3,3],[3,1],[1,1]], columns=list('AB'))
df
df = df.loc[(df.A>1) & (df.B>1)]
df['B'] = 10

Когда я запускаю это, я получаю предупреждение:

main : 1: SettingWithCopyWarning: значение пытается бытьустановить копию фрагмента из DataFrame.Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = значение

Странно то, что если я пропущу строку "df", она будет запущена без предупреждения.Это предполагаемое поведение?

В общем, если я хочу фильтровать DataFrame по значениям в разных столбцах, нужно ли мне делать copy (), чтобы избежать SettingWithCopyWarning?

спасибо оченьмного

1 Ответ

0 голосов
/ 14 ноября 2018

Предполагая ваш DataFrame, как показано ниже, из вашего вопроса, это позволит избежать SettingWithCopyWarning

Существует github Обсуждение и решение, предложенное одним из разработчиков Pandas Джеффом :)

df
   A  B
1  3  3

Лучше всего использовать этот способ.

df1['B'] = df['B'].replace(3, 10)
df1
   A   B
1  3  10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...