#python #json #character-encoding #robotframework #python-2.x
#python
Вопрос:
Я очищаю фрейм данных pandas и встречаю строку unicode, u
внутри которой есть обратная косая черта, чем мне нужно заменить, например
u'u2014'.replace('u','')
Result: u'u2014'
Я пробовал кодировать ее, а utf-8
затем декодировать, но это не сработало, и я чувствую, что должен быть более простой способ обойти это.
код pandas
merged['Rank World Bank'] = merged['Rank World Bank'].astype(str)
Ошибка
UnicodeEncodeError: 'ascii' codec can't encode character u'u2014' in position 0: ordinal not in range(128)
Комментарии:
1. Это не дезинфекция, это дезинфекция. Таким образом вы повредите данные.
2.
'u2014'
является тире em. Почему вы хотите ее удалить?3. чтобы превратить столбец в str
4. вопрос об обновлении
5. где? @InAFlash
Ответ №1:
u'u2014'
на самом деле -
. Это не число. Это utf-8
символ. Попробуйте использовать ключевое слово print для его печати. Вы будете знать
Это вывод в ipython:
In [4]: print("val = ", u'u2014')
val = —
Основываясь на вашем комментарии, вот что вы делаете неправильно
«-» не совпадает с символом Юникода «EM Dash» (u’ u2014′)
Итак, вы должны сделать следующее
print(u'u2014'.replace("u2014",""))
и это будет работать
РЕДАКТИРОВАТЬ: поскольку вы используете python 2.x, вы должны закодировать его с помощью utf-8 следующим образом
u'u2014'.encode('utf-8').decode('utf-8').replace("-","")
Комментарии:
1. это так же плохо, поскольку похоже, что удалить конечные символы практически невозможно. Это
u'u2014'.replace('—','')
выдает ошибкуUnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
2. Следует отметить, что «-» не равно u’ u2014′
3. вы должны выполнить следующее u’ u2014′.replace(» u2014″,»»)
4. Используете ли вы python 2.x?
5. @SamuelM. Попробуйте это, которое работает как в Python 2, так и в 3:
s = u'emu2014dash'; print(s); s=s.replace(u'—', ''); print(s)
Ответ №2:
Да, потому что он принимает ‘2014’, за которым следует ‘ u’ в качестве строки unicode, а не строкового литерала.
Вещи, которые могут помочь:
- Преобразование в ascii с использованием .encode(‘ascii’, ‘ignore’)
- Поскольку вы используете pandas, вы можете использовать параметр ‘encoding’ и передать туда ‘ascii’.
- Сделайте это вместо этого: u’ u2014′.replace(u’ u2014′, u’2014′).encode(‘ascii’, ‘ignore’)
Надеюсь, это поможет.