Создание dataframe из нескольких списков в Pandas
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если вам необходимо скомпоновать несколько списков в DataFrame средствами Python, вы можете обратиться к конструктору pd.DataFrame()
, передав ему словарь для создания столбцов, или использовать функцию zip()
, которая распределит данные по строкам. Пример ниже иллюстрирует оба подхода:
import pandas as pd
list1, list2, list3 = [1, 2], [3, 4], [5, 6]
df_cols = pd.DataFrame({'A': list1, 'B': list2, 'C': list3})
list4, list5, list6 = [7, 8, 9], [10, 11, 12], [13, 14, 15]
df_rows = pd.DataFrame(list(zip(list4, list5, list6)), columns=['A', 'B', 'C'])
Увеличение производительности с помощью numpy
Применение numpy
существенно улучшает производительность обработки больших объемов данных. Комбинация np.column_stack()
с numpy позволяет обработать данные в два раза быстрее, чем с использованием zip()
.
import numpy as np
import pandas as pd
list1, list2, list3 = range(100), range(100, 200), range(200, 300)
df_fast = pd.DataFrame(np.column_stack((list1, list2, list3)), columns=['A', 'B', 'C'])
При работе с большими наборами данных крайне важно следить за совпадением длины всех списков, в противном случае вас могут поджидать проблемы связанные с обрезкой данных или их дополнением.
Работа со списками разной длины
pd.concat()
позволяет легко соединять списки разной длины, обеспечивая согласованное объединение.
list1, list2, list3 = range(5), range(10), range(15)
df_unequal = pd.concat([pd.Series(lst) for lst in [list1, list2, list3]], axis=1)
df_unequal.columns = ['A', 'B', 'C']
Форма имеет значение: как выбрать названия столбцов и индексы
Выбранные вами названия столбцов могут существенно облегчить вам работу с данными.
df_with_names = pd.DataFrame(np.column_stack((list1, list2, list3)),
columns=['Высокий', 'Средний', 'Низкий'])
Правильная индексация играет ключевую роль, особенно при работе с временными рядами, уникальными идентификаторами или категориями.
Визуализация
Подготовка данных для DataFrame напоминает приготовление ингредиентов для теста:
Ингредиенты (🥧): [Яблоки, Черника, Вишни]
Контейнеры (📦): [Список 1, Список 2, Список 3]
Аналогия работает и при создании и подаче готовых изделий:
🥧 Поднос 1 (🍏): | Список 1 | Яблоко |
🥧 Поднос 2 (🫐): | Список 2 | Черника |
🥧 Поднос 3 (🍒): | Список 3 | Вишня |
В итоге получается DataFrame, который мы можем активно использовать для анализа данных.
Нюансы работы с DataFrame
Вы можете использовать генераторы списков и мультииндексы для создания больших и сложных DataFrame:
lists_dynamic = [[i for i in range(j, j+100)] for j in range(0, 300, 100)]
index = pd.MultiIndex.from_tuples([(i, j) for i in 'ABC' for j in range(100)])
df_multi_index = pd.DataFrame({'Статус': np.hstack(lists_dynamic)}, index=index)
Завершение
Просмотрите размер созданного DataFrame и сверьте его с желаемым, чтобы удостовериться в его правильности:
assert df_multi_index.shape == (300, 1)
Следующий шаг — это проверка типов данных и поиск возможных пропущенных значений, чтобы данные были полностью готовы к использованию.
Полезные материалы
- pandas.DataFrame — документация pandas 2.2.0 — полный справочник по возможностям DataFrame в библиотеке Pandas.
- 10 минут с pandas — документация pandas 2.2.0 — пошаговое руководство по основам библиотеки Pandas.
- Доступ к элементам DataFrame в Pandas — полезные советы по работе со структурами DataFrame.
- Знакомство с объектами Pandas | Руководство по науке о данных на Python — обзор основ работы c Pandas для обработки данных.
- DataFrame в Pandas: освоенное работа с данными – Real Python — глубокое погружение в функциональность DataFrame в Pandas.
- Medium — изучение различных методов преобразования данных в DataFrame.