2017-01-25 13 views
0

Выпуск Невозможно удалить специальный символ () из столбца dataframe.Pandas: Tricky Unicode Ошибка при преобразовании Dataframe

фон: У меня есть dataframe истории котировок акций, загруженных из Интернета в кодировке utf8 (link to CSV). Я попытался .apply() на колонке, содержащей ежедневные объемы торгов, то есть, «Volume» Как скриншоте. ниже на рисунке, .apply() использует лямбда сначала удалить все запятые из строки и затем конвертировать результат в int. Когда это лямбда попадает полукокс .... ну, вы можете себе представить.

Обычно преобразование из str в int или float в пандах - это cinch. Я не могу удалить проблему после нескольких часов поиска на SO и попытки решения конвертировать/удалять юникоды.

В конечном счете, я хочу, чтобы функция удаляла ВСЕ специальные символы/юникоды из строк или просто преобразовывала их в эквивалент utf8 и создавала логическую маску, чтобы я мог избежать этой проблемы в будущем.

Код Err Report from Code

+0

Line 2093 в CSV есть мусор в нем. Исправьте ввод или дезинформируйте его и проверьте пустую строку перед вызовом 'int'. Покажите воспроизводимый пример, и мы могли бы дать лучший совет. –

+0

@MarkTolonen Этот мусор - это то, от чего я пытался избавиться. Что еще более важно, я хочу избежать всего такого мусора, если он будет представлен в любых данных, поступающих из внешних источников в будущем. MaxU дал приемлемое решение. – Adestin

ответ

0

Решение:

df = pd.read_csv(filename) 

df.Volume = pd.to_numeric(df.Volume.str.replace(',', ''), errors='coerce') 
0

Из-за мусора в CSV строке 2093, сохранить только цифры и добавить дополнительный ведущий ноль для пустых условий строки:

lambda x: int('0'+re.sub('[^0-9]','',x)) 
+0

'int ('')' все еще поднимается. –

+0

int (' ') и int ('') дают значение ValueError: недействительный литерал для int() с базой 10. –

0

Загрузили файл для вас и попытался это из. Это должно работать:

[re.sub(r'[^\x00-\x7F]+','0', i.decode('utf-8').replace(',','')) for i in test.Volume] 
Смежные вопросы