Анализ табличных данных в среде Python: Pandas и NumPy
Основные подходы к работе с табличными данными
Как загрузить табличные данные из CSV в Pandas и выполнить базовый анализ?
Библиотека Pandas предоставляет функцию pandas.read_csv, которая является стандартным инструментом для загрузки табличных данных из текстовых файлов с разделителями. После загрузки данные хранятся в объекте DataFrame, который напоминает электронную таблицу. Рассмотрим простой пример:
import pandas as pd
df = pd.read_csv('sales.csv', sep=';', encoding='utf-8')
print(df.head())
Python для анализа данных (python для анализа данных)
Пояснение: параметр sep указывает разделитель (по умолчанию запятая), encoding задает кодировку. Функция head() показывает первые 5 строк. Для получения общей информации используется df.info(), а для статистики – df.describe().
Типичные проблемы: неверный разделитель, неправильная кодировка (возникает UnicodeDecodeError), наличие заголовка (параметр header). Решение: проверить файл в текстовом редакторе, указать правильные параметры. Например, для файлов с разделителями табуляции используется sep='\t'. Для пропуска строк перед данными – skiprows.
Как импортировать данные из Excel-файла?
Для загрузки Excel-файлов используется функция pandas.read_excel, которая требует установленной библиотеки openpyxl или xlrd.
import pandas as pd
df = pd.read_excel('report.xlsx', sheet_name='Лист1', engine='openpyxl')
print(df.shape)
анализ больших данных python (анализ больших данных в python)
Пояснение: sheet_name может быть именем листа или индексом. engine выбирает парсер; для .xlsx рекомендуется openpyxl. Атрибут shape возвращает размерность (строки, столбцы).
Ошибки: отсутствие модуля openpyxl (установить через pip install openpyxl), слишком большой файл (можно читать по частям с параметром chunk).
Как создать таблицу из словаря Python?
Словарь, где ключи – названия столбцов, а значения – списки, передается в конструктор DataFrame.
data = {'Name': ['Alice', 'Bob'], 'Age': [25, 30], 'City': ['Moscow', 'Kazan']}
df = pd.DataFrame(data)
print(df)
Python анализ данных excel (анализ данных excel в python)
Результат:
Name Age City
0 Alice 25 Moscow
1 Bob 30 Kazan
анализ данных python pdf (анализ данных pdf в python)
Этот способ удобен для создания небольших таблиц в коде, например, для тестирования.
Как преобразовать массив NumPy в таблицу Pandas?
Массивы NumPy часто используются в научных вычислениях. Для преобразования необходимо передать массив и указать названия столбцов.
import numpy as np
arr = np.array([[1, 2], [3, 4], [5, 6]])
df = pd.DataFrame(arr, columns=['A', 'B'])
print(df)
Python анализ данных и машинное обучение (анализ данных и машинное обучение на python)
A B 0 1 2 1 3 4 2 5 6
анализ данных с использованием python (анализ данных с использованием python)
Пояснение: массив должен быть двумерным. Если данные одномерные, можно передать как список столбцов.
Как загрузить данные из SQL запроса?
Pandas позволяет напрямую считывать результаты SQL-запроса с помощью pd.read_sql или pd.read_sql_query. Для этого требуется подключение к базе данных (например, через SQLAlchemy или sqlite3).
import sqlite3
conn = sqlite3.connect('database.db')
query = "SELECT * FROM employees WHERE department = 'Sales'"
df = pd.read_sql(query, conn)
conn.close()
print(df.info())
Python анализ текстовых данных (анализ текстовых данных в python)
Пояснение: после выполнения запроса данные загружаются в DataFrame, соединение закрывается. Это удобно для интеграции анализа с существующими базами.
Проблемы: медленная передача больших данных (рекомендуется использовать чанки или ограничить запрос), несовместимость типов данных (можно задать dtype).
Как выбрать строки по условию с помощью query?
Метод query позволяет фильтровать DataFrame с использованием строкового выражения, что часто удобнее цепочек логических операторов.
df_filtered = df.query('Age > 25 and City == "Moscow"')
print(df_filtered)
аналитик данных python sql (аналитик данных python sql)
Пояснение: выражение записывается как строка; имена столбцов используются без кавычек, а значения строк – в кавычках. Метод возвращает новый DataFrame. Он эффективнее при больших данных, так как использует numexpr.
Ошибка: SyntaxError при использовании неправильных кавычек. Необходимо экранировать кавычки внутри строки. Альтернатива: использовать переменные через @.
Как сгруппировать данные и вычислить среднее?
Для группировки используется метод groupby, после которого применяются агрегирующие функции (mean, sum, count и др.).
grouped = df.groupby('City')['Age'].mean()
print(grouped)
Python библиотеки numpy и pandas (библиотеки numpy и pandas в python)
Результат: средний возраст по городам. Если нужно несколько агрегаций, используется agg. Например:
df.groupby('City').agg({'Age': ['mean', 'std'], 'Name': 'count'})
библиотеки python для обработки данных (библиотеки python для обработки данных (pandas, numpy и др.))
Пояснение: группировка – мощный инструмент для сводной статистики.
Как заполнить пропуски средним значением?
Пропущенные значения (NaN) можно обработать с помощью метода fillna или interpolate. Например:
df['Age'] = df['Age'].fillna(df['Age'].mean())
математика и python для анализа данных (математика и python для анализа данных)
Пояснение: сначала вычисляется среднее по столбцу, затем все NaN заменяются этим значением. Для других стратегий (медиана, мода) аналогично. Или можно удалить строки с пропусками: dropna.
Важно: замена пропусков средним может искажать распределение, особенно если выбросы. Лучше анализировать природу пропусков.
Как объединить две таблицы по ключу?
Для объединения используется функция pd.merge, аналогичная SQL JOIN. Пример:
df1 = pd.DataFrame({'id': [1,2], 'name': ['A','B']})
df2 = pd.DataFrame({'id': [1,3], 'score': [90,80]})
merged = pd.merge(df1, df2, on='id', how='left')
print(merged)
методы анализа данных python (методы анализа данных в python)
id name score 0 1 A 90.0 1 2 B NaN
Пояснение: параметр how определяет тип соединения (left, right, inner, outer). Если ключи совпадают не полностью, NaN для отсутствующих. Для объединения по нескольким столбцам передается список.
Расширенные примеры работы с табличными данными
Сводная таблица с множественными агрегациями
Функция pivot_table позволяет создавать многомерные сводки с различными статистическими показателями.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'Date': ['2023-01-01','2023-01-01','2023-01-02','2023-01-02'],
'Product': ['A','B','A','B'],
'Sales': [100, 150, 200, 50],
'Region': ['North','South','North','South']
})
pivot = pd.pivot_table(df, values='Sales', index='Date', columns='Region', aggfunc=[np.sum, np.mean])
print(pivot)
sum mean
Region North South North South
Date
2023-01-01 100.0 150.0 100.0 150.0
2023-01-02 200.0 50.0 200.0 50.0
Пояснение: индексом становится столбец Date, столбцами – Region, а значения агрегируются функциями sum и mean. Это удобно для анализа по нескольким измерениям.
Категориальные данные для экономии памяти
Преобразование строковых столбцов в категориальный тип (Categorical) уменьшает занимаемую память и ускоряет операции.
df['Category'] = pd.Categorical(df['Product'], categories=['A','B','C'], ordered=True)
print('Коды категорий:', df['Category'].cat.codes)
print('Категории:', df['Category'].cat.categories)
Коды категорий: 0 0 1 1 2 0 3 1 dtype: int8 Категории: Index(['A', 'B', 'C'], dtype='object')
Пояснение: параметр ordered задает упорядоченность. Коды хранятся как целые числа (int8), что значительно экономит память по сравнению с хранением строк.
Применение пользовательской функции к строкам (apply)
Метод apply с axis=1 позволяет применить функцию к каждой строке DataFrame для сложной логики.
def classify(row):
if row['Sales'] > 150:
return 'High'
else:
return 'Low'
df['Class'] = df.apply(classify, axis=1)
print(df[['Product','Sales','Class']])
Product Sales Class 0 A 100 Low 1 B 150 Low 2 A 200 High 3 B 50 Low
Пояснение: функция получает каждую строку как Series. Альтернатива – векторизованные операции, но apply удобен для нестандартных условий.
Передискретизация временных рядов (resample)
Для данных с временной меткой метод resample изменяет частоту дискретизации и применяет агрегацию.
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
ts = pd.Series(np.random.randint(0,100,size=len(date_rng)), index=date_rng)
print('Исходный ряд:', ts.head())
print('Среднее за 3 дня:')
print(ts.resample('3D').mean())
Исходный ряд: 2023-01-01 44 2023-01-02 71 2023-01-03 19 2023-01-04 57 2023-01-05 88 Freq: D, dtype: int32 Среднее за 3 дня: 2023-01-01 44.666667 2023-01-04 57.000000 2023-01-07 37.666667 2023-01-10 43.000000 Freq: 3D, dtype: float64
Пояснение: исходный ряд с ежедневной частотой группируется по 3-дневным интервалам. Можно использовать различные агрегации (sum, ohlc, asfreq).