5 способов создать DataFrame в Pandas: от новичка к мастеру данных

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Новички в области анализа данных
  • Студенты и практиканты в сфере 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. Из словаря со списками

Python
Скопировать код
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. Из списка словарей

Python
Скопировать код
# Список словарей, где каждый словарь — одна строка
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. Из вложенных списков с указанием имен столбцов

Python
Скопировать код
# Вложенные списки (каждый внутренний список — строка данных)
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-файла

Python
Скопировать код
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

Python
Скопировать код
# Чтение из 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-базы данных

Python
Скопировать код
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

Python
Скопировать код
# Чтение из 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

Python
Скопировать код
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 с заданной структурой

Python
Скопировать код
# Создание пустого 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 для генерации тестовых данных

Python
Скопировать код
# В новых версиях 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 с данными определенного распределения

Python
Скопировать код
# Создание 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 с пометкой времени

Python
Скопировать код
# Создание 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

Python
Скопировать код
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

Python
Скопировать код
# Создаем 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

Python
Скопировать код
# Создаем несколько 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. Преобразование вложенных структур данных

Python
Скопировать код
# Вложенная структура данных (список списков с разной длиной)
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. Преобразование из других библиотек анализа данных

Python
Скопировать код
# Пример преобразования из 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 дает вам мощный инструментарий для решения разнообразных аналитических задач.

Загрузка...