Как использовать inplace в python после вызова функции?

#python #pandas

#python #pandas

Вопрос:

Пример: 1

У меня есть 7 столбцов, которые содержат "???" . Я заменил "???" на NAN, используя np.nan . Когда я попытался снова прочитать фрейм данных, то показывал то же самое "???" . Как использовать inplace и изменить его в основном фрейме данных?

Пример: 2

Я использую функцию для очистки всех 7 столбцов и получаю приведенное ниже сообщение об ошибке

кодирование для регистра: 1

df является ли мой фрейм данных

 df.iloc[:, 0:8].replace('???', np.nan)
  

Я получаю NAN после выполнения приведенного выше кода.

Затем я снова попытался прочитать df, после чего в столбце появилось то же самое "???" .

Не удается вставить скриншот.

Пример: 2

 def cleaning(x):
    x = x.replace("???", np.nan)
    return(x)

df = df.iloc[:, 0:8]
df.applymap(cleaning)
  

все столбцы dtype являются object

Ошибка:

 TypeError: ('replace() argument 2 must be str, not float', 'occurred at index Transport')
  

Комментарии:

1. для случая 1 df.iloc[:, 0:8]=df.iloc[:, 0:8].replace('???', np.nan) должно сработать. Вы удаляете код, но не присваиваете его обратно

2. Вам нужно будет присвоить измененные значения, т.е. заменить их обратно на df @Jason

Ответ №1:

В обоих случаях вам нужно назначить его обратно в df[:, 0:8]:

Случай 1:

 df.iloc[:, 0:8] =df.iloc[:, 0:8].astype(str).replace('???', np.nan)
  

Случай 2:

 def cleaning(x):
    x =x.replace('???', np.nan)
    return(x)

df.iloc[:, 0:8] =df.iloc[:, 0:8].astype(str).apply(cleaning)
  

Комментарии:

1. Привет, Лучи, спасибо за твои решения. теперь это работает. Просто для пояснения в случае 1. Почему вы выбрали df.iloc[:, 0:2] вместо 0:8. В любом случае, это работает. Просто хочу знать причину. Не удается найти решение

Ответ №2:

Используйте флаг inplace и установите для него значение true

 df.iloc[:, 0:8].replace('???', np.nan, inplace=True)
  

Ответ №3:

numpy.NaN является float. и вы используете str.replace() функцию, которой нужны 2 строковых параметра в качестве старого и заменяющего значения, вы должны использовать пустую строку вместо NaN.

Комментарии:

1. Привет, Марк, я изменил на пустую строку, и она стала пустой вместо ???. Тем не менее, я снова проверил df, а затем??? появляется. Нужно ли нам использовать inplace? если да, то как это использовать?