Обычно я делаю общую фильтрацию по строкам следующим образом:
criterion = lambda row: row['countries'] not in countries
not_in = df[df.apply(criterion, axis=1)]
Вам не нужна библиотека вне стандартной - просто используют Набор символов . (Можно просто использовать Строковых конструкторов и getBytes методы, но лично мне не нравится просто работать с названиями кодировок символов. Слишком много комнаты для опечаток.)
РЕДАКТИРОВАНИЕ: Как указано в комментариях, можно все еще использовать экземпляры Набора символов, но иметь простоту использования Строковых методов: новая Строка (байты, набор символов) и String.getBytes (набор символов) .
CharsetDecoder
должен быть тем, что Вы ищете, нет?
Много сетевых протоколов и файлов снабжают свои символы байтовым набором символов такой как ISO-8859-1
(ISO-Latin-1
).
Однако собственная кодировка символов Java Unicode UTF16BE (Шестнадцатиразрядный Формат Преобразования UCS, обратный порядок байтов).
См. Charset
. Это не означает UTF16
, набор символов по умолчанию (т.е.: значение по умолчанию, "отображающееся между последовательностями шестнадцатиразрядных элементы кода Unicode и последовательностями байтов"):
Каждый экземпляр виртуальной машины Java имеет набор символов по умолчанию, который может или не может быть одним из стандартных наборов символов.
[US-ASCII
,ISO-8859-1
иначеISO-LATIN-1
,UTF-8
,UTF-16BE
,UTF-16LE
,UTF-16
]
набор символов по умолчанию определяется во время запуска виртуальной машины и обычно зависит от локали и набора символов, используемого базовой операционной системой.
Этот пример демонстрирует, как преобразовать ISO-8859-1
закодированные байты в ByteBuffer
к строке в CharBuffer
и стих визы.
// Create the encoder and decoder for ISO-8859-1
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();
try {
// Convert a string to ISO-LATIN-1 bytes in a ByteBuffer
// The new ByteBuffer is ready to be read.
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap("a string"));
// Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.
// The new ByteBuffer is ready to be read.
CharBuffer cbuf = decoder.decode(bbuf);
String s = cbuf.toString();
} catch (CharacterCodingException e) {
}
Это намного проще, если вы подумаете о юникоде как о наборе символов (что на самом деле и есть - это, по сути, нумерованный набор всех известных символов). Вы можете закодировать его как UTF-8 (1-3 байта на символ в зависимости от) или, возможно, UTF-16 (2 байта на символ или 4 байта с использованием суррогатных пар).
Назад в туманные времена Java использовала UCS- 2 для кодирования набора символов Юникода. Это могло обрабатывать только 2 байта на символ и теперь устарело. Добавление суррогатных пар и переход на UTF-16 было довольно очевидным приемом.
Многие люди думают, что им в первую очередь следовало использовать UTF-8. Когда изначально была написана Java, в юникоде все равно было гораздо больше 65535 символов ...