Декодировать HTML из столбца pandas

У меня есть фрейм данных, где один из столбцов - это название валюты на испанском языке fos US Dolares, которое

Доларес

Но он закодирован в HTML, поэтому я действительно читаю '' и не могу найти способ декодировать это для всего столбца. Это проблема, потому что мне нужно экспортировать в .csv после, и это вызывает проблемы.

Я пробовал использовать разные библиотеки кодирования/декодирования, такие как beautifulsoup, HTMLParser и еще пару.

Есть идеи, в чем может быть проблема?


person Marco    schedule 29.01.2018    source источник
comment
Какой код вы использовали, чтобы попробовать? Каков был результат? Можете ли вы опубликовать некоторые образцы данных? Какова текстовая кодировка ввода (и вывода)?   -  person Evan    schedule 29.01.2018
comment
Какую операционную систему вы используете?   -  person Cyberguille    schedule 29.01.2018
comment
@Cyberguille MacOS High Sierra 10.13.2   -  person Marco    schedule 29.01.2018
comment
@Evan Im запрашивает из базы данных с помощью MySQLdb (вы можете найти код здесь: github.com /pandas-dev/pandas/issues/19447). Большую часть времени он вообще ничего не расшифровывал. Во входных данных было слово Dlares от слова Dólares на испанском языке.   -  person Marco    schedule 29.01.2018
comment
Думаю, я немного смущен; HTML — это не кодировка, это язык разметки. Текст, который отображает HTML, закодирован набором символов, например. ASCII или UTF-8. Сейчас рекомендуется UTF-8, но если вы используете Python 2.7, я не уверен, насколько сильна совместимость. Возможно, связано: stackoverflow.com/questions/20935151/   -  person Evan    schedule 29.01.2018
comment
@Evan, когда я запускаю Type() для этих полей, он возвращает NoneType.   -  person Marco    schedule 29.01.2018
comment
Без каких-либо образцов данных или исполняемого кода вам сложно помочь. Кроме того, в вашей ссылке на github вы экспортируете в JSON, а не в CSV, что может привести к дополнительным ошибкам кодирования.   -  person Evan    schedule 29.01.2018
comment
Когда вы делаете db = MySQLdb.connect("","","","" ), указываете ли вы, например, charset='utf8'? Я бы возился с этим и смотрел, что происходит.   -  person Jarad    schedule 29.01.2018
comment
@Jarad Джарад Это отличный момент. Я еще немного поэкспериментирую с этим!   -  person Marco    schedule 29.01.2018


Ответы (1)


Я подозреваю, что то, что вы видите, это то, что на самом деле находится в базе данных: "Dólares"

Вы можете преобразовать такие строки следующим образом:

from html2text import unescape

Если вы хотите убрать акцент:

unescape("Dólares")

Out[29]'Dolares'

Или, если вы хотите сохранить акцент:

unescape("Dólares", True)

Out[30]: 'Dólares'

Чтобы декодировать весь столбец, сохраняя акценты:

df.Currency = df.Currency.apply(unescape, unicode_snob=True)
person adr    schedule 29.01.2018
comment
ЭТО делает трюк, я столкнулся с еще 1 проблемой, которую я хотел бы добавить для будущих людей. Мне пришлось привести к str, чтобы вызвать некоторые значения столбца, где «NoneType». - person Marco; 30.01.2018
comment
Рад слышать. Вы могли бы сделать df.Currency = df.Currency.fillna("") до unescape. - person adr; 30.01.2018