#python #python-3.x #pandas #dataframe #character-encoding
#питон #python-3.x #панды #фрейм данных #кодировка символов
Вопрос:
В колонке моего набора данных было несколько странных символов, таких как b'Gebietseinheit Kassel ohne Groxdfstxe4dte'
. С помощью str.decode('latin1')
исправлена проблема. Однако это, например, приводит к путанице с обычными строками MyNamePlace
и изменяет их на null.
content = gpd.read_file(fpath, encoding='utf-8') content.RKI_NameDE = content.RKI_NameDE.str.decode('latin1')
Можно ли автоматически проверить, какие строки требуют декодирования или нет? Как я могу предотвратить декодирование всех строк?
Или как я могу использовать оператор if else для проверки «возможно x
«, а затем изменять только эти строки?
Комментарии:
1. ты имеешь в виду, что все странные str-это байтовые строки?
2. да 😛 но я имел в виду, что не все они являются байтовыми строками @ZLi
Ответ №1:
Измените только ту часть фрейма данных, в которой он является байтовым str:
df = pd.DataFrame({'s':[b'Gebietseinheit Kassel ohne Groxdfstxe4dte', 'MyNamePlace']}) byte_str = df['s'].map(type) == type(b'') df.loc[byte_str, 's'] = df.loc[byte_str, 's'].str.decode('latin_1')
Ответ №2:
Если у вас есть условие для проверки, вы можете создать функцию, а затем использовать apply, возвращая либо декодированную строку, либо исходную строку, если вам не нужно ее декодировать.
def decode_col(x): if condition: return x.RKI_NameDE.decode('latin1') return x.RKI_NameDE content.RKI_NameDE = content.apply(decode_col, axis=1)