Коды символов в Python: от символа к числу и обратно

Раздел: Python -> Pandas

Основные способы работы с кодами символов

Базовое решение: получение кода символа и обратное преобразование

В Python для получения числового кода символа используется встроенная функция ord(), а для преобразования числа обратно в символ - chr(). Эти функции работают с кодировкой Unicode (включая ASCII).

print(ord('A'))  # 65
print(chr(65))    # 'A'

обработка больших данных python (обработка больших данных в python)

65
A

очистка данных python (очистка данных в python)

Типичная ошибка: передача строки длиннее одного символа в ord(). Функция ожидает ровно один символ. Решение - взять первый символ: ord('Hello'[0]) или обрабатывать строку посимвольно.

Как получить код первого символа строки?

Используется обращение по индексу и ord():

text = "Python"
code = ord(text[0])  # 80 (код 'P')

Python подготовка данных (подготовка данных в python)

80

Python работа с большими данными (работа с большими данными в python)

Если строка пустая, возникает IndexError. Перед обращением следует проверить длину строки: if text: code = ord(text[0]).

Как применить ord() ко всем символам строки и получить список кодов?

Использование генератора списка или map():

s = "Привет"
codes = [ord(c) for c in s]  # [1055, 1088, 1080, 1074, 1077, 1090]
print(codes)

генерация данных python (генерация данных в python)

[1055, 1088, 1080, 1074, 1077, 1090]

Python код символа (код символа в python)

Как обработать столбец Pandas с текстом, преобразовав каждый элемент в код первого символа?

Метод .apply() или .map() с lambda-функцией:

import pandas as pd
df = pd.DataFrame({'text': ['A', 'B', 'C', 'D']})
df['code'] = df['text'].apply(lambda x: ord(x[0]) if len(x)>0 else None)
print(df)

код из файла python (код из файла python)

  text  code
0    A    65
1    B    66
2    C    67
3    D    68

обработка данных на python (обработка данных на python)

Если в ячейке есть пустая строка, код упадёт с IndexError. Используется условие if len(x)>0 else None. Альтернатива - .str[0] для извлечения первого символа: df['text'].str[0].apply(ord), но это также может вернуть NaN для пустых строк.

Как проверить, что символ является буквой кириллицы по его коду?

Коды кириллицы находятся в диапазонах: заглавные (А-Я) - 1040–1071, строчные (а-я) - 1072–1103. Проверка:

ch = 'Ф'
code = ord(ch)
if 1040 <= code <= 1071 or 1072 <= code <= 1103:
    print(f"{ch} - кириллическая буква")

обработка символьных данных python (обработка символьных данных в python)

Ф - кириллическая буква

Python преобразование в строку (преобразование в строку в python)

Как преобразовать столбец Pandas с кодами обратно в символы?

Применение chr() через apply или map:

df = pd.DataFrame({'code': [65, 66, 67]})
df['char'] = df['code'].apply(chr)
print(df)

Python как проверить строку (проверка строки в python)

   code char
0    65    A
1    66    B
2    67    C

как работать с данными в python (работа с данными в python)

Если значение кода выходит за пределы допустимого диапазона Unicode (0–0x10FFFF), возникает ValueError. Стоит предварительно валидировать данные: lambda x: chr(x) if 0 <= x <= 0x10FFFF else None.

Как получить код эмодзи (символа из дополнительной плоскости Unicode)?

Эмодзи часто занимают два кодовых пункта (суррогатная пара), но ord() корректно возвращает полный Unicode-код при условии, что Python 3 и символ передан как один элемент строки.

emoji = "?"
print(hex(ord(emoji)))  # 0x1f600

Python наборы данных (наборы данных в python)

0x1f600

При попытке взять эмодзи как часть строки, полученной из внешнего источника, может возникнуть ошибка индексации, если эмодзи представлен суррогатной парой. Рекомендуется использовать next(iter(text)) или нормализацию строки.

- Python get url (получение url в python)
- Get data python (получение данных в python)
- Python get file name (получение имени файла в python)

Расширенные примеры использования ord() и chr()

Пример 1. Генерация таблицы символов ASCII

Вывод символов от 32 до 126 включительно (печатные символы ASCII).

Пример
for code in range(32, 127):
    print(f"{code:3d} -> {chr(code)}")
 32 ->   
 33 -> !
 34 -> "
 ...
126 -> ~

Пример 2. Фильтрация строк Pandas по диапазону кодов символов

Оставить только те строки, в которых каждый символ является цифрой (коды 48-57).

Пример
import pandas as pd
df = pd.DataFrame({'value': ['123', '12A', '456']})

def is_digit_string(s):
    return all(ord(c) in range(48, 58) for c in s)

df_filtered = df[df['value'].apply(is_digit_string)]
print(df_filtered)
  value
0   123
2   456

Пример 3. Создание нового столбца с кодами всех символов (как список)

Пример
df = pd.DataFrame({'word': ['cat', 'dog', 'bird']})
df['codes'] = df['word'].apply(lambda w: [ord(c) for c in w])
print(df)
  word          codes
0  cat  [99, 97, 116]
1  dog  [100, 111, 103]
2  bird [98, 105, 114, 100]

Пример 4. Преобразование кодов в символы с проверкой допустимости

Применение chr() с val= None для недопустимых кодов.

Пример
codes = [65, 20013, 1114112, -1]
def safe_chr(code):
    if isinstance(code, int) and 0 <= code <= 0x10FFFF:
        return chr(code)
    return None

result = [safe_chr(c) for c in codes]
print(result)  # ['A', '中', None, None]
['A', '中', None, None]

Пример 5. Обработка пустых строк и NaN в Pandas

Пример
import pandas as pd
import numpy as np
df = pd.DataFrame({'text': ['Hello', '', np.nan, 'Hi']})
df['first_code'] = df['text'].apply(
    lambda x: ord(x[0]) if isinstance(x, str) and len(x) > 0 else None
)
print(df)
  text  first_code
0  Hello        72.0
1              NaN
2   NaN         NaN
3    Hi         72.0

Пример 6. Использование ord() в условной выборке (замена символа по коду)

Заменить все строчные буквы на заглавные через работу с кодами.

Пример
text = "Hello, World!"
result = ''.join(
    chr(ord(ch) - 32) if 'a' <= ch <= 'z' else ch
    for ch in text
)
print(result)  # HELLO, WORLD!
HELLO, WORLD!

Пример 7. Пакетная обработка DataFrame с эмодзи

Извлечение кода эмодзи из столбца (если ячейка состоит из одного эмодзи).

Пример
df = pd.DataFrame({'emoji': ['?', '❤️', '?', 'text']})
# Определяем, является ли строка одиночным эмодзи (длина 1 или суррогатная пара)
def get_emoji_code(s):
    if isinstance(s, str) and len(s) == 1:
        return ord(s)
    elif isinstance(s, str) and len(s) == 2 and 0xD800 <= ord(s[0]) <= 0xDBFF:
        # суррогатная пара: объединяем
        return 0x10000 + (ord(s[0]) - 0xD800) * 0x400 + (ord(s[1]) - 0xDC00)
    return None

df['code'] = df['emoji'].apply(get_emoji_code)
print(df)
  emoji   code
0   ?  128512
1   ❤️  65039   (но здесь ❤ это один символ U+2764, а вариационный селектор U+FE0F даёт длину 2)
2   ?  128640
3  text   None

Примечание: Работа с эмодзи сложна из-за комбинирующих символов. Для точной обработки рекомендуется использовать библиотеки типа emoji или unicodedata.

Код символа в Python - comments

En
Python код символа (python)