обработка данных
March 2, 2023

Ключевые способы трансформации таблиц Pandas в иные структуры

В ходе обработки массивов данных зачастую приходится преобразовывать датафреймы в иные объекты для совместимости с другими модулями. Рассмотрим основные структуры на примере следующей таблицы:

import pandas as pd

df = pd.DataFrame([['id1', 'key_new1','key_old1'], ['id2','key_new2','key_old2'],
                  ['id3', 'key_new3','key_old3'], ['id4','key_new4','key_old4']], 
                  columns=['id', 'new', 'old'])
df

NumPy массив

Хоть многие модули и поддерживают Pandas, стандартом де-факто для работы с данными являются NumPy массивы, которые совместимы со всеми уважающими себя сторонними библиотеками. Для такого преобразования следует вызвать свойство values или метод to_numpy:

df.values
df.to_numpy()

Словарь

Допустим, вы хотите создать словарик из ключей в колонке old и значений в new. Проще всего для этих целей преобразовать массив в серию с ключами по индексу. В нашем случае следует создать срез из нужных столбцов, установить ключевой в индексы, выбрать другой и вызвать метод to_dict:

df[['new', 'old']].set_index('old')['new'].to_dict()

Список

Списки, как и словари являются встроенными типами в Python, поэтому вопрос преобразования в них обеспечит совместимость с любой библиотекой. На практике в списки приходится преобразовывать значения некоторой колонки. Это можно сделать методом to_list:

df['id'].to_list()

Кортеж

Не редко приходится выгружать кортежи из значений нескольких колонок (например, чтобы проверить на пересечения с другой структурой). Для этих целей я пользуюсь комбинацией метода apply и функции tuple для каждой пары:

df[['old', 'new']].apply(lambda x: tuple(x), axis=1).to_list()
df[['old', 'new']].apply(lambda x: tuple(x), axis=1).unique()