
Работа с табличными данными в Python начинается с библиотеки pandas. Основная структура – DataFrame, которая позволяет эффективно хранить, обрабатывать и анализировать данные. Она представляет собой двумерную таблицу с метками по строкам и столбцам, поддерживающую различные типы данных, включая строки, числа и даты.
Создание датафрейма возможно из списков, словарей, массивов NumPy, а также из внешних источников – CSV, Excel, SQL. Например, словарь с ключами в виде названий столбцов и списками значений создаст датафрейм с автоматически сгенерированными индексами. Это удобно при сборке данных вручную или из JSON-ответов API.
При создании датафрейма важно сразу задать правильную структуру: например, использовать параметр index для задания пользовательских индексов, а dtypes – для контроля типов данных. Это уменьшит необходимость последующей переработки и ускорит обработку.
Если источником данных служит файл, то pandas.read_csv() и pandas.read_excel() позволяют быстро сформировать датафрейм. Обязательно указывайте кодировку (encoding), разделитель (sep) и строки с заголовками (header), чтобы избежать ошибок чтения и неверной интерпретации данных.
При создании датафрейма из массивов важно, чтобы размеры совпадали: списки внутри должны быть одинаковой длины, иначе возникнет исключение. Аналогично, при использовании NumPy-матриц необходимо следить за соответствием размерности и нужными типами данных (dtype).
Создание датафрейма из словаря списков

Для инициализации датафрейма через словарь списков используется структура: ключи – названия столбцов, значения – списки с данными. Метод pandas.DataFrame() автоматически сопоставляет элементы списков по индексам.
Пример:
import pandas as pd
данные = {
"Имя": ["Анна", "Борис", "Виктор"],
"Возраст": [28, 34, 25],
"Город": ["Москва", "Казань", "Томск"]
}
df = pd.DataFrame(данные)
print(df)
Результат:
Имя Возраст Город
0 Анна 28 Москва
1 Борис 34 Казань
2 Виктор 25 Томск
Важно: все списки должны иметь одинаковую длину. Несовпадение вызывает ValueError. Для контроля структуры полезно использовать len() на всех значениях словаря перед созданием датафрейма.
Если необходимо задать собственные индексы:
df = pd.DataFrame(данные, index=["a", "b", "c"])
Такой подход особенно удобен при работе с уже структурированными данными, например, из JSON или API, где каждая запись – словарь, а поля – списки значений по категориям.
Создание датафрейма из списка словарей

Список словарей – удобная структура для формирования датафрейма, где каждый словарь соответствует строке, а ключи – именам столбцов. Для преобразования используется функция pd.DataFrame() из библиотеки pandas.
Пример:
import pandas as pd
данные = [
{"имя": "Анна", "возраст": 28, "город": "Москва"},
{"имя": "Иван", "возраст": 34, "город": "Санкт-Петербург"},
{"имя": "Ольга", "возраст": 25, "город": "Казань"}
]
df = pd.DataFrame(данные)
print(df)
Если словари содержат разные ключи, отсутствующие значения автоматически заполняются NaN:
данные = [
{"имя": "Алексей", "возраст": 30},
{"имя": "Мария", "город": "Новосибирск"},
{"имя": "Юрий", "возраст": 45, "город": "Екатеринбург"}
]
df = pd.DataFrame(данные)
print(df)
Рекомендуется обеспечивать единообразие ключей во всех словарях, чтобы избежать пропущенных данных. При необходимости можно задать порядок столбцов с помощью параметра columns:
df = pd.DataFrame(данные, columns=["имя", "город", "возраст"])
Создание датафрейма из CSV-файла
Для чтения CSV-файлов в pandas используется функция read_csv(). Укажите путь к файлу как строку, используя прямой или абсолютный путь. Пример: df = pd.read_csv('данные/продажи.csv').
Если в файле используется другая кодировка (например, Windows-1251 для русскоязычных данных), добавьте параметр encoding: df = pd.read_csv('файл.csv', encoding='cp1251').
Файлы с разделителями, отличными от запятой, требуют указания sep. Например, для табуляции: sep='\t'.
Если первый ряд не содержит заголовков, установите header=None, чтобы pandas не считал первую строку именами столбцов. В этом случае имена можно задать через параметр names: pd.read_csv('файл.csv', header=None, names=['A', 'B']).
Для выборочной загрузки столбцов используйте usecols. Пример: pd.read_csv('файл.csv', usecols=['id', 'сумма']).
Чтобы указать типы данных и сократить объем памяти, используйте параметр dtype: pd.read_csv('файл.csv', dtype={'id': 'int32', 'сумма': 'float32'}).
При работе с датами применяйте parse_dates для автоматического преобразования: pd.read_csv('файл.csv', parse_dates=['дата']).
Создание датафрейма из NumPy массива

Для преобразования NumPy массива в DataFrame используется функция pd.DataFrame(). Обязательный аргумент – сам массив. Дополнительно можно задать названия столбцов через параметр columns.
Пример: имеется массив np_array = np.array([[1, 2], [3, 4], [5, 6]]). Чтобы создать DataFrame с колонками 'A' и 'B', вызов будет следующим:
import numpy as np
import pandas as pd
np_array = np.array([[1, 2], [3, 4], [5, 6]])
df = pd.DataFrame(np_array, columns=['A', 'B'])
Тип данных в DataFrame наследуется от NumPy массива. Если массив содержит только числа с плавающей точкой, все значения в DataFrame будут float64. Для явного задания типов используется astype() после создания:
df = df.astype({'A': 'int32', 'B': 'int32'})
Для многомерных массивов размерности выше 2 перед созданием DataFrame необходимо их привести к двумерной форме с помощью reshape() или flatten(), в зависимости от структуры данных:
np_array = np.arange(12).reshape(4, 3)
df = pd.DataFrame(np_array, columns=['X', 'Y', 'Z'])
Если массив не содержит именованных осей, имена строк (индексы) будут присвоены автоматически. Для задания собственных индексов используется параметр index:
df = pd.DataFrame(np_array, columns=['X', 'Y', 'Z'], index=['a', 'b', 'c', 'd'])
Перед передачей массива следует убедиться, что его форма соответствует количеству указанных столбцов, иначе будет вызван ValueError. Размерность массива должна быть строго двумерной: одна ось для строк, другая – для столбцов.
Задание названий столбцов при создании датафрейма
Названия столбцов в Pandas DataFrame задаются при инициализации с помощью параметра columns. Это особенно важно, если данные передаются в виде списка списков или массива NumPy, где имена столбцов по умолчанию будут заданы в виде чисел.
Пример: создание датафрейма из вложенного списка с явным указанием заголовков:
import pandas as pd
data = [[1, 'Алексей'], [2, 'Мария']]
df = pd.DataFrame(data, columns=['ID', 'Имя'])
Если исходные данные представлены словарём, ключи автоматически становятся названиями столбцов. Однако порядок следования можно задать вручную, указав список в параметре columns:
data = {'Имя': ['Иван', 'Ольга'], 'Возраст': [28, 34]}
df = pd.DataFrame(data, columns=['Возраст', 'Имя'])
При создании датафрейма из массива NumPy необходимо обязательно задать названия столбцов, иначе они будут иметь числовые индексы:
import numpy as np
array = np.array([[100, 200], [300, 400]])
df = pd.DataFrame(array, columns=['Счет1', 'Счет2'])
Имена столбцов должны быть уникальными. Повторяющиеся названия могут привести к неоднозначным операциям фильтрации и агрегации. Проверить их уникальность можно с помощью выражения df.columns.is_unique.
Для переименования столбцов после создания используйте метод df.rename() или прямое присваивание df.columns = [...names...].
Создание пустого датафрейма и добавление данных
Для создания пустого датафрейма в Python используется библиотека pandas. Пустой датафрейм можно создать, передав в конструктор пустой список или словарь.
Пример создания пустого датафрейма:
import pandas as pd
df = pd.DataFrame()
После выполнения этого кода df будет представлять собой пустую таблицу без строк и столбцов.
Чтобы добавить данные в пустой датафрейм, можно использовать несколько подходов. Рассмотрим их подробнее.
Добавление данных через список

Один из способов — передать данные в виде списка, где каждый элемент списка будет представлять собой строку датафрейма. Для этого можно использовать аргумент columns, чтобы задать имена столбцов.
data = [[1, 'John', 28], [2, 'Alice', 24]]
df = pd.DataFrame(data, columns=['ID', 'Name', 'Age'])
Теперь датафрейм df будет содержать две строки с данными о пользователях и соответствующие столбцы:
IDNameAge
Добавление данных через словарь
Еще один способ — это использование словаря, где ключи будут названиями столбцов, а значения — списками данных для каждого столбца.
data = {'ID': [1, 2], 'Name': ['John', 'Alice'], 'Age': [28, 24]}
df = pd.DataFrame(data)
Этот подход также создаст датафрейм с теми же столбцами, что и в предыдущем примере.
Добавление строк после создания датафрейма

Если датафрейм уже существует, добавление строк можно выполнить с помощью метода loc или append.
df.loc[len(df)] = [3, 'Bob', 22]
Этот код добавляет новую строку в конец датафрейма с индексом 3 и значениями для каждого столбца. Можно добавить несколько строк одновременно:
new_data = pd.DataFrame([[4, 'Charlie', 30]], columns=['ID', 'Name', 'Age'])
df = df.append(new_data, ignore_index=True)
Обратите внимание, что метод append возвращает новый датафрейм, поэтому присваивание результата в исходную переменную обязательно.
Создание и добавление столбцов

Для добавления столбца к существующему датафрейму можно присвоить значения столбца через его имя:
df['Salary'] = [50000, 60000, 55000, 65000]
Также можно создать новый столбец с помощью функции assign:
df = df.assign(Salary=[50000, 60000, 55000, 65000])
Метод assign возвращает новый датафрейм, а старый остается неизменным.
Создание датафрейма с заданным типом данных столбцов

При создании датафрейма в библиотеке pandas важно контролировать типы данных столбцов для эффективного хранения и обработки информации. Это позволяет избежать ошибок при анализе и повысить производительность. Для задания типа данных используется параметр dtypes при создании датафрейма или метод astype().
В примере ниже создается датафрейм с явным указанием типов данных для столбцов:
import pandas as pd
data = {
'age': [23, 45, 34, 50],
'salary': [50000, 70000, 60000, 65000],
'is_manager': [True, False, False, True]
}
df = pd.DataFrame(data)
# Задание типов данных для столбцов
df = df.astype({
'age': 'int32',
'salary': 'float64',
'is_manager': 'bool'
})
print(df.dtypes)
Здесь столбец age будет иметь тип int32, salary – тип float64, а is_manager – тип bool. Это важно, чтобы предотвратить ошибки при математических вычислениях или фильтрации данных по булевым значениям.
Для явного указания типа данных можно также использовать параметр dtype при создании датафрейма:
df = pd.DataFrame(data, dtype='float64')
print(df.dtypes)
Метод astype() также полезен, когда нужно преобразовать уже существующие столбцы. Например, если столбец с числовыми значениями был неправильно интерпретирован как строка, можно привести его к нужному типу:
df['salary'] = df['salary'].astype('int32')
print(df['salary'].dtypes)
Типы данных можно комбинировать. Например, для больших числовых значений можно использовать int64 или float64, а для категориальных данных – category, что сэкономит память и ускорит анализ.
Следует помнить, что неправильный выбор типа данных может повлиять на точность вычислений и время обработки данных, особенно при работе с большими объемами информации.
Вопрос-ответ:
Что такое датафрейм в Python и зачем он нужен?
Датафрейм (DataFrame) в Python — это структура данных, которая представляет собой таблицу с данными. Он используется для хранения и обработки данных в виде строк и столбцов, что очень удобно при работе с большими объемами информации. Он является частью библиотеки Pandas, которая предоставляет мощные средства для анализа и манипуляции данными. В отличие от обычных списков или словарей, датафрейм позволяет легко работать с таблицами, применять фильтрацию, сортировку и различные статистические операции.
