Поиск и замена плохих символов в pandas фрейме данных - PullRequest
0 голосов
/ 31 января 2020

Я застреваю, пытаясь избавиться от плохих персонажей в pandas кадре данных. Это автоматический скрипт, который обрабатывает входящие данные, которые необходимо сохранить в cp1252, и я хочу иметь возможность обрабатывать любые проблемные символы на лету, анализируя ошибку. Мне все равно, чем они заменены. Я пробовал миллион вариантов этого и нигде не могу получить (это python 3 pandas 25)

while True:
    try:
        print('saving')
        data.to_csv('total.csv', index=False, quoting=csv.QUOTE_ALL, encoding='cp1252')
        break
    except UnicodeEncodeError as e:
        print(e)
        badchar = re.search(r"character (.+?) in", str(e)).group(1)
        print('Found bad character, removing. . . ')
        uchar = u"{}".format(badchar)
        print(uchar)
        data = data.replace(uchar.encode('utf-8'), '')

Возвращает:

saving
'charmap' codec can't encode character '\u2264' in position 399: character maps to <undefined>
Found bad character, removing. . . 
'\u2264'
saving
'charmap' codec can't encode character '\u2264' in position 399: character maps to <undefined>
Found bad character, removing. . . 
'\u2264'
saving
'charmap' codec can't encode character '\u2264' in position 399: character maps to <undefined>
Found bad character, removing. . . 
'\u2264'
saving

У меня есть пробовал тонну вариаций:

data = data.replace(uchar, '')

data = data.replace(uchar.encode('utf-8').decode('utf-8'), '') et c. , ,

Я также пробовал u '\ 2264', u'u \ 2264 '

Я также не могу найти это в кадре данных. Это ничего не возвращает:

for col in data:
    if sum(data[col].astype(str).str.contains(u'\2264')) > 0:
        print(col)

Любая помощь будет оценена спасибо!

1 Ответ

0 голосов
/ 31 января 2020

Вы должны использовать функцию замены с регулярным выражением: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html

df.replace(to_replace=r'^ba.$', value='new', regex=True)
...