#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? если да, то как это использовать?