Общая операция, которую мне нужно сделать с помощью pandas, - это прочитать таблицу из файла excel и затем удалить точки с запятой из всех полей. Столбцы часто в смешанных типов данных, и я бегу в AtributeError, когда пытаешься сделать что-то вроде этого: for col in cols_to_check: df[col] = df[col].map(lambda x: x.replace(';',''))
удаление символа из всего фрейма данных
AttributeError: 'float' object has no attribute 'replace'
когда я оберните его в str()
перед заменой у меня есть проблемы с символами Unicode, например for col in cols_to_check: df[col] = df[col].map(lambda x: str(x).replace(';',''))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)
В Excel это очень простая операция, все, что требуется, чтобы заменить ;
с пустой строкой. Как я могу сделать это аналогично в пандах для всего кадра данных, игнорируя типы данных? Или я чего-то не хватает?
спасибо, это работает! То, что мне не хватало, было 'regex = True'. Без него 'replace' ищет всю строку, а не частичную (так же, как опция соответствия целого элемента содержимого excel) – user3087386
Да, вы правы. Спасибо, что приняли! – jezrael
Я бы предложил небольшое обновление вашего ответа. В моем вопросе я упоминаю, что у меня смешанные типы данных в столбцах (не только между столбцами). Но в вашем примере вы используете согласованные типы данных. Также вы проверяете столбцы со строками, но 'df = df.replace ({';': ''}, regex = True)' работает так же хорошо, и даже если вы измените один из столбцов на что-то например '['a;', 1.02, 'b']' – user3087386