Выбор строк DF, хранящихся в переменной.Как мне работать только с этими строками? - PullRequest
0 голосов
/ 07 марта 2019

Скажем, у меня есть выборка строк из данных, хранящихся в переменной errorData. Когда я отображаю эту переменную, отображаются правильные строки (т. Е. Выбор кажется правильным). Моя цель - заменить только строки, соответствующие критериям в моей переменной, на np.nan

errorData = df.loc[(df['Percent'] == 100) &\
                  (df['Rating1'] != 8) &\
                  (df['Rating2'] != 1)&\
                  (df['Grade'] == "NG")]

for i in errorData:
        df['Percent'].replace(df['Percent']==100, np.nan,inplace=True)

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

df['Grade'] == "B"

Я тоже пробовал пару других способов, например:

for i in errorData:
        df['Percent'].replace(100, np.nan,inplace=True)

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

Заранее извиняюсь за любые ошибки в вышеуказанном.

Обновление: для уточнения, если я выполню

df.loc[(df['Percent'] == 100) &\
                  (df['Rating1'] != 8) &\
                  (df['Rating2'] != 1)&\
                  (df['Grade'] == "NG")].shape

Он вернул (129,8) - то есть мои действительные строки.

А если я выполню

df['Percent'].isnull().sum()

До изменения я получу 0, но после изменения я получу 400. Это означает, что не редактирует только строки, выбранные в моей переменной erroneousData, и я не могу понять, почему.

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

При этом:

df.loc[(df['Percent'] == 100) &\
       (df['Rating1'] != 8) &\
       (df['Rating2'] != 1)&\
       (df['Grade'] == "NG")]

Вы выбираете все столбцы из строк, которые соответствуют этим условиям.

Поскольку изменения будут иметь место только в столбце Percent, вы должны передатьэто в .loc.Таким образом, вы можете установить его напрямую.

df.loc[(df['Percent'] == 100) &\
       (df['Rating1'] != 8) &\
       (df['Rating2'] != 1)&\
       (df['Grade'] == "NG"), 'Percent'] = np.nan
0 голосов
/ 07 марта 2019

Я никогда не отвечал на свой вопрос раньше! Но я нашел ответ здесь:

Выбор с помощью сложных критериев из pandas.DataFrame

Для всех, кто интересуется, каким было решение, формат кода из первого ответа на этот вопрос сработал в моей ситуации:

df.loc[(df["Percent"] == 100) & (df["Rating1"] != 8) &\
      (df["Rating2"] != 1) & (df['Grade'] == "NG"), "Percent"] = np.nan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...