str.декодируйте только некоторые строки из фрейма данных

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