5 способов создать DataFrame в Pandas: от новичка к мастеру данных
Для кого эта статья:
- Новички в области анализа данных
- Студенты и практиканты в сфере IT и разработки
Профессионалы, желающие улучшить свои навыки работы с данными в Python
Вы когда-нибудь чувствовали себя потерянным среди моря данных? 🌊 Представьте: у вас есть важная информация, но она разбросана по файлам, таблицам и спискам. Именно здесь на сцену выходит DataFrame из библиотеки Pandas — ваш надежный инструмент для укрощения информационного хаоса. В этой статье я покажу 5 кристально понятных способов создания и заполнения DataFrame, которые превратят вас из новичка в уверенного дата-мастера быстрее, чем вы думаете!
Хотите не просто узнать о DataFrame, а освоить весь Python на профессиональном уровне? Программа Обучение Python-разработке от Skypro выведет вас от новичка до готового специалиста всего за 9 месяцев. Pandas, анализ данных и работа с DataFrame — лишь малая часть навыков, которые вы получите. Плюс — гарантия трудоустройства после окончания. Начните путь к высокооплачиваемой профессии уже сегодня!
Что такое DataFrame и зачем его создавать в Pandas
DataFrame — это двумерная структура данных в Pandas, напоминающая таблицу Excel или SQL-таблицу. Представьте его как умную электронную таблицу с рядами (строками) и колонками, где каждый элемент имеет точные координаты. В отличие от обычных таблиц, DataFrame обладает мощным функционалом для анализа, фильтрации и трансформации данных.
Зачем использовать DataFrame? Вот пять ключевых причин:
- Эффективная обработка — DataFrame оптимизирован для быстрых операций даже с большими объемами данных
- Интуитивная индексация — легко выбирать, фильтровать и сортировать данные
- Обработка пропусков — встроенные методы для работы с отсутствующими значениями (NaN)
- Объединение данных — слияние таблиц через merge, concat и join
- Визуализация — прямая интеграция с библиотеками для построения графиков
Артём Светлов, Lead Data Scientist Когда я начинал свой путь в data analysis, я тратил часы на манипуляции с данными в Excel. Однажды мне поручили проанализировать продажи компании за 5 лет — более 500,000 транзакций. Excel начал зависать, а моя работа превратилась в кошмар. Тогда коллега показал мне Pandas и DataFrame. Код из десяти строк сделал то, что я безуспешно пытался сделать неделю! Группировка по датам, подсчет выручки по регионам, фильтрация аномальных значений — всё это заняло минуты вместо дней. С этого момента я навсегда перешел на Python и Pandas.
Прежде чем мы погрузимся в практические примеры, убедитесь, что у вас установлены необходимые библиотеки:
pip install pandas numpy
А теперь давайте изучим различные способы создания DataFrame!

Способ 1: Создание DataFrame из словарей и списков
Создание DataFrame из словарей и списков — самый распространенный и интуитивно понятный способ для начинающих. Вы можете использовать этот метод, когда данные уже находятся в памяти Python или при создании тестовых наборов данных.
Рассмотрим три основных подхода:
1. Из словаря со списками
import pandas as pd
# Данные о студентах
data = {
'Имя': ['Анна', 'Иван', 'Мария', 'Алексей'],
'Возраст': [22, 21, 20, 23],
'Курс': [3, 2, 2, 4],
'Средний балл': [4\.8, 3.9, 4.5, 4.2]
}
# Создание DataFrame
df = pd.DataFrame(data)
print(df)
В этом примере каждый ключ словаря становится названием столбца, а соответствующий список — значениями в этом столбце.
2. Из списка словарей
# Список словарей, где каждый словарь — одна строка
students = [
{'Имя': 'Анна', 'Возраст': 22, 'Курс': 3, 'Средний балл': 4.8},
{'Имя': 'Иван', 'Возраст': 21, 'Курс': 2, 'Средний балл': 3.9},
{'Имя': 'Мария', 'Возраст': 20, 'Курс': 2, 'Средний балл': 4.5},
{'Имя': 'Алексей', 'Возраст': 23, 'Курс': 4, 'Средний балл': 4.2}
]
# Создание DataFrame
df_from_records = pd.DataFrame(students)
print(df_from_records)
Здесь каждый словарь представляет отдельную строку DataFrame, а ключи определяют названия столбцов.
3. Из вложенных списков с указанием имен столбцов
# Вложенные списки (каждый внутренний список — строка данных)
data_lists = [
['Анна', 22, 3, 4.8],
['Иван', 21, 2, 3.9],
['Мария', 20, 2, 4.5],
['Алексей', 23, 4, 4.2]
]
# Имена столбцов
columns = ['Имя', 'Возраст', 'Курс', 'Средний балл']
# Создание DataFrame
df_from_lists = pd.DataFrame(data_lists, columns=columns)
print(df_from_lists)
В этом случае мы явно указываем имена столбцов отдельно от данных.
| Метод создания | Преимущества | Недостатки | Идеально для |
|---|---|---|---|
| Словарь со списками | Наглядность, интуитивность | Все списки должны быть одной длины | Малых и средних наборов данных |
| Список словарей | Естественное представление записей | Избыточность при большом числе записей | Данных из JSON API |
| Вложенные списки | Компактность представления | Требует отдельного списка имен столбцов | Чистых табличных данных |
Дополнительные параметры при создании:
index— позволяет задать пользовательские индексы строкdtype— для явного указания типов данных столбцовcopy— создает копию данных (True) или использует ссылку (False)
Использование этих методов позволяет легко создавать DataFrame с нуля, что особенно полезно при разработке и тестировании функций data analysis, не требуя внешних файлов данных.
Способ 2: Импорт данных из внешних источников
В реальных проектах данные обычно хранятся во внешних файлах или базах данных. Pandas предлагает множество функций для импорта данных из различных источников напрямую в DataFrame. Рассмотрим самые распространенные методы.
1. Чтение из CSV-файла
import pandas as pd
# Базовое чтение CSV
df_csv = pd.read_csv('data.csv')
# С дополнительными параметрами
df_csv_advanced = pd.read_csv('data.csv',
sep=';', # разделитель
decimal=',', # десятичный разделитель
encoding='utf-8', # кодировка
header=0, # строка с заголовками (0 = первая строка)
skiprows=[0, 2], # пропустить строки
na_values=['NA', 'Missing'] # значения, интерпретируемые как NaN
)
CSV-файлы — самый распространенный формат для обмена табличными данными благодаря своей простоте и универсальности.
2. Чтение из Excel
# Чтение из Excel
df_excel = pd.read_excel('data.xlsx')
# С дополнительными параметрами
df_excel_advanced = pd.read_excel('data.xlsx',
sheet_name='Продажи', # имя листа
skiprows=2, # пропустить первые 2 строки
usecols='A:D', # использовать только столбцы A-D
na_values='н/д' # значения, интерпретируемые как NaN
)
Excel-файлы часто используются в бизнес-среде, и Pandas делает их импорт почти таким же легким, как импорт CSV.
3. Чтение из SQL-базы данных
from sqlalchemy import create_engine
# Создание подключения к базе данных
engine = create_engine('sqlite:///database.db')
# Чтение данных из SQL-запроса
df_sql = pd.read_sql_query('SELECT * FROM customers WHERE region = "Europe"', engine)
# Чтение целой таблицы
df_table = pd.read_sql_table('customers', engine)
Интеграция с SQL особенно полезна для аналитиков, работающих с корпоративными базами данных.
4. Чтение из JSON
# Чтение из JSON-файла
df_json = pd.read_json('data.json')
# Чтение из JSON-строки
json_str = '{"Имя":{"0":"Анна","1":"Иван"},"Возраст":{"0":22,"1":21}}'
df_json_str = pd.read_json(json_str)
JSON-формат широко используется в веб-приложениях и API, делая его важным источником данных для анализа.
Екатерина Ларина, Senior Data Analyst Однажды на проекте по анализу маркетинговых данных мне пришлось объединить информацию из трех совершенно разных источников: отчеты из CRM в Excel, данные о посещениях сайта в JSON из API и историческую информацию из SQL-базы. Раньше это означало бы экспорт всех данных в один формат и последующее объединение. Используя Pandas, я написала скрипт, который импортировал данные из всех трех источников в DataFrame, преобразовывал их к единому формату и объединял за считанные минуты. Это сэкономило несколько дней ручной работы и позволило обновлять аналитику ежедневно, просто запуская скрипт. Клиент был в восторге от оперативности получения свежих инсайтов! 📊
5. Другие форматы
Pandas также поддерживает множество других форматов:
pd.read_html()— парсинг таблиц из HTML-страницpd.read_parquet()— чтение Parquet-файлов (сжатый колоночный формат)pd.read_hdf()— работа с HDF5-файлами (для больших объемов данных)pd.read_clipboard()— импорт данных из системного буфера обмена
| Формат | Скорость чтения | Размер файла | Популярность в Python |
|---|---|---|---|
| CSV | Средняя | Большой | Очень высокая |
| Excel | Низкая | Средний | Высокая |
| JSON | Средняя | Большой | Высокая |
| SQL | Высокая* | N/A | Высокая |
| Parquet | Очень высокая | Маленький | Средняя |
- Зависит от размера запроса и настроек базы данных
Выбор правильного метода импорта зависит от формата ваших исходных данных и конкретных требований проекта. Универсальность Pandas в работе с разными форматами — одна из причин его популярности в экосистеме Python для data analysis. 🐼
Способ 3: Генерация DataFrame с помощью функций Pandas
Иногда вам нужно быстро создать DataFrame с определенной структурой или для тестирования алгоритмов. Pandas предлагает ряд встроенных функций, которые генерируют DataFrame с различными типами данных и паттернами. Давайте рассмотрим самые полезные из них.
1. Генерация временных рядов с pd.date_range и DataFrame
import pandas as pd
import numpy as np
# Создание диапазона дат за последние 10 дней с шагом в 1 день
dates = pd.date_range(start='2023-01-01', periods=10, freq='D')
# Создание DataFrame с случайными данными по продажам
df_timeseries = pd.DataFrame({
'Дата': dates,
'Продажи': np.random.randint(100, 1000, size=10),
'Посетители': np.random.randint(500, 2000, size=10)
})
print(df_timeseries)
Этот код создает DataFrame с данными о продажах и посетителях за 10 последовательных дней. Отлично подходит для тестирования алгоритмов анализа временных рядов или визуализации данных.
2. Создание пустого DataFrame с заданной структурой
# Создание пустого DataFrame с определенными столбцами и типами данных
df_empty = pd.DataFrame(columns=['ID', 'Имя', 'Возраст', 'Дата регистрации'])
# Задаем типы данных
df_empty = df_empty.astype({
'ID': 'int',
'Имя': 'string',
'Возраст': 'int',
'Дата регистрации': 'datetime64[ns]'
})
print(df_empty.dtypes)
Пустой DataFrame с предопределенной структурой идеален, когда вы хотите постепенно заполнять его данными или использовать как шаблон.
3. Использование pd.util.testing для генерации тестовых данных
# В новых версиях pandas используется pandas.testing вместо pd.util.testing
from pandas import testing as tm
# Создание DataFrame с случайными числами
df_random = tm.makeDataFrame() # 30 строк, 4 столбца по умолчанию
# Создание DataFrame с случайными датами
df_random_dates = tm.makeTimeDataFrame(freq='D', nper=20) # 20 строк с датами
print(df_random.head())
print("\n")
print(df_random_dates.head())
Этот метод особенно полезен для написания тестов или при разработке аналитических функций, когда вам нужны данные определенной структуры.
4. Создание DataFrame с данными определенного распределения
# Создание DataFrame с нормальным распределением
df_normal = pd.DataFrame({
'Нормальное': np.random.normal(0, 1, 1000),
'Равномерное': np.random.uniform(0, 1, 1000),
'Логнормальное': np.random.lognormal(0, 1, 1000)
})
# Базовая статистика по распределениям
print(df_normal.describe())
Этот подход идеален для статистического анализа, моделирования и тестирования гипотез.
5. Создание DataFrame с пометкой времени
# Создание DataFrame с данными и временной меткой
df_timestamped = pd.DataFrame({
'value': np.random.randn(5),
'timestamp': pd.Timestamp('now')
})
print(df_timestamped)
Удобно для логирования или отслеживания изменений в данных с течением времени.
Преимущества генерации DataFrame с помощью функций Pandas:
- Экономия времени на создании тестовых данных вручную
- Возможность создавать данные с заданными статистическими характеристиками
- Воспроизводимость результатов (можно задать seed для генератора случайных чисел)
- Легкая интеграция с другими функциями анализа и визуализации
- Тестирование кода на данных различного объема и структуры
Генерация данных — не только инструмент для тестирования, но и мощный способ изучить возможности Pandas и понять, как работают различные функции анализа на контролируемых примерах. 🧪
Способ 4: Преобразование других структур в DataFrame
В процессе работы с данными часто возникает необходимость преобразовывать существующие структуры данных в DataFrame для дальнейшего анализа. Pandas предлагает гибкие методы конвертации из различных Python-объектов и специализированных структур данных.
1. Преобразование NumPy массивов в DataFrame
import pandas as pd
import numpy as np
# Создаем 2D массив NumPy
array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# Преобразуем в DataFrame
df_from_array = pd.DataFrame(array_2d, columns=['A', 'B', 'C'])
print(df_from_array)
NumPy массивы и Pandas DataFrame тесно связаны, поэтому преобразование между ними происходит очень эффективно. Это особенно полезно, когда у вас есть результаты вычислений или моделирования в NumPy.
2. Преобразование Series в DataFrame
# Создаем Pandas Series
series = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
# Преобразуем в DataFrame
df_from_series = series.to_frame(name='Values')
# Альтернативный способ
df_from_series2 = pd.DataFrame(series, columns=['Values'])
print(df_from_series)
Series — это одномерный маркированный массив в Pandas. Преобразование Series в DataFrame позволяет добавлять дополнительные столбцы или применять более сложные операции, доступные только для DataFrame.
3. Преобразование нескольких Series в один DataFrame
# Создаем несколько Series
series1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
series2 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
series3 = pd.Series([100, 200, 300], index=['a', 'b', 'c'])
# Объединяем в DataFrame
df_from_multiple_series = pd.concat([series1, series2, series3], axis=1)
df_from_multiple_series.columns = ['Малые', 'Средние', 'Большие']
print(df_from_multiple_series)
Объединение нескольких Series в один DataFrame особенно полезно при работе с временными рядами или когда данные приходят из разных источников.
4. Преобразование вложенных структур данных
# Вложенная структура данных (список списков с разной длиной)
nested_data = [
{'id': 1, 'tags': ['python', 'pandas', 'data']},
{'id': 2, 'tags': ['analysis', 'visualization']},
{'id': 3, 'tags': ['machine learning']}
]
# Преобразуем в DataFrame
df_nested = pd.DataFrame(nested_data)
# Преобразование списка в строку для удобства просмотра
df_nested['tags_str'] = df_nested['tags'].apply(lambda x: ', '.join(x))
print(df_nested)
Pandas отлично справляется с вложенными структурами, но иногда требуется дополнительная обработка для "выпрямления" или нормализации данных.
5. Преобразование из других библиотек анализа данных
# Пример преобразования из PySpark DataFrame (если установлен PySpark)
# from pyspark.sql import SparkSession
# spark = SparkSession.builder.getOrCreate()
# spark_df = spark.createDataFrame([(1, "a"), (2, "b")], ["id", "letter"])
# pandas_df = spark_df.toPandas()
# Пример преобразования из R dataframe с помощью rpy2
# import rpy2.robjects as ro
# from rpy2.robjects import pandas2ri
# pandas2ri.activate()
# r_df = ro.r('data.frame(x=1:3, y=c("a", "b", "c"))')
# pandas_df = pandas2ri.rpy2py(r_df)
Возможность конвертации между различными форматами данных делает Pandas центральным хабом в экосистеме анализа данных Python.
Сегодня мы рассмотрели 5 простых способов создания и заполнения DataFrame в Pandas — от базовых структур данных до импорта из внешних источников. Освоив эти техники, вы сможете быстро подготовить данные для дальнейшего анализа в любом проекте. Помните: правильная структурированная таблица — это уже половина успеха в работе с данными. Какой бы способ вы ни выбрали, Pandas дает вам мощный инструментарий для решения разнообразных аналитических задач.