python unicode заменить обратную косую черту u пустой строкой

#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’)

Надеюсь, это поможет.