Pandas и NumPy: библиотеки для анализа данных на Python
Основы работы с NumPy и Pandas
NumPy и Pandas представляют собой фундаментальные библиотеки Python для научных вычислений и анализа данных. NumPy обеспечивает мощные n-мерные массивы и быстрые векторизованные операции, а Pandas, построенный на NumPy, предлагает структуры данных DataFrame и Series для удобной работы с табличными и размеченными данными. Вместе они позволяют эффективно решать задачи от предобработки до сложного анализа.
Базовый набор операций с NumPy и Pandas
import numpy as np
import pandas as pd
# Создание массива NumPy
arr = np.array([1, 2, 3, 4, 5])
print('Массив:', arr)
print('Сумма:', arr.sum())
# Создание DataFrame
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'salary': [50000, 60000, 70000]
})
print('\nDataFrame:\n', df)
print('\nСтатистика:\n', df.describe())Python для анализа данных (python для анализа данных)
Массив: [1 2 3 4 5]
Сумма: 15
DataFrame:
name age salary
0 Alice 25 50000
1 Bob 30 60000
2 Charlie 35 70000
Статистика:
age salary
count 3.000000 3.0
mean 30.000000 60000.0
std 5.000000 10000.0
min 25.000000 50000.0
25% 27.500000 55000.0
50% 30.000000 60000.0
75% 32.500000 65000.0
max 35.000000 70000.0анализ больших данных python (анализ больших данных в python)
Этот пример демонстрирует создание одномерного массива и таблицы данных, а также получение описательной статистики. Основное преимущество – скорость вычислений за счёт векторизации.
Как создать массив из нулей или равномерно распределённых чисел?
Для создания массивов с фиксированными значениями используются функции np.zeros, np.ones, np.arange и np.linspace.
zeros = np.zeros((2, 3))
ones = np.ones(4)
seq = np.arange(0, 10, 2)
lin = np.linspace(0, 1, 5)
print(zeros, ones, seq, lin, sep='\n\n')Python анализ данных excel (анализ данных excel в python)
[[0. 0. 0.] [0. 0. 0.]] [1. 1. 1. 1.] [0 2 4 6 8] [0. 0.25 0.5 0.75 1. ]
анализ данных python pdf (анализ данных pdf в python)
Типичная ошибка:
По умолчанию np.zeros и np.ones создают массивы с типом float64. Если требуется целый тип, нужно явно указать dtype=np.int32. Иначе при попытке сохранить целые числа в уже существующий массив может возникнуть неявное преобразование.
Как создать DataFrame из списка списков или словаря?
Помимо словаря, Pandas позволяет строить DataFrame из списка списков с указанием названий столбцов.
data = [['Alice', 25], ['Bob', 30], ['Charlie', 35]]
df_from_list = pd.DataFrame(data, columns=['name', 'age'])
print(df_from_list)Python анализ данных и машинное обучение (анализ данных и машинное обучение на python)
name age 0 Alice 25 1 Bob 30 2 Charlie 35
анализ данных с использованием python (анализ данных с использованием python)
Проблема:
Если количество элементов во внутренних списках различается, возникает ошибка ValueError: All arrays must be of the same length. Перед созданием стоит проверять длину данных.
Как отфильтровать строки по условию?
Фильтрация выполняется с помощью булевой индексации: df[df['age'] > 30].
filtered = df[df['age'] > 30]
print(filtered)Python анализ текстовых данных (анализ текстовых данных в python)
name age salary 2 Charlie 35 70000
аналитик данных python sql (аналитик данных python sql)
Распространённая ошибка:
Использование операторов and и or вместо & и | для комбинирования условий. Python требует круглые скобки вокруг каждого условия при использовании побитовых операторов.
# Неправильно: df[df['age'] > 30 and df['salary'] > 55000]
# Правильно:
df[(df['age'] > 30) & (df['salary'] > 55000)]Python библиотеки numpy и pandas (библиотеки numpy и pandas в python)
Как обработать пропущенные значения?
Методы fillna, dropna и interpolate позволяют заполнять или удалять отсутствующие данные.
df_nan = pd.DataFrame({'A': [1, np.nan, 3], 'B': [4, 5, np.nan]})
print('Исходный:', df_nan, sep='\n')
print('\nПосле fillna(0):\n', df_nan.fillna(0))библиотеки python для обработки данных (библиотеки python для обработки данных (pandas, numpy и др.))
Исходный:
A B
0 1.0 4.0
1 NaN 5.0
2 3.0 NaN
После fillna(0):
A B
0 1.0 4.0
1 0.0 5.0
2 3.0 0.0математика и python для анализа данных (математика и python для анализа данных)
Внимание:
Параметр inplace=True изменяет исходный объект. Многие новички путают, когда нужно присвоить результат обратно, а когда достаточно вызова с inplace. Рекомендуется явно присваивать результат, чтобы избежать путаницы с копиями и представлениями.
Как объединить несколько DataFrame?
Для объединения по строкам используется pd.concat, для слияния по ключам – pd.merge.
df1 = pd.DataFrame({'id': [1,2], 'val': ['a','b']})
df2 = pd.DataFrame({'id': [3,4], 'val': ['c','d']})
concat = pd.concat([df1, df2], ignore_index=True)
print('Конкатенация:\n', concat)
# Слияние
left = pd.DataFrame({'id': [1,2], 'name': ['Alice','Bob']})
right = pd.DataFrame({'id': [1,3], 'score': [85, 90]})
merged = pd.merge(left, right, on='id', how='outer')
print('\nСлияние outer:\n', merged)методы анализа данных python (методы анализа данных в python)
Конкатенация:
id val
0 1 a
1 2 b
2 3 c
3 4 d
Слияние outer:
id name score
0 1 Alice 85.0
1 2 Bob NaN
2 3 NaN 90.0Python для анализа данных обучение (обучение анализу данных на python)
Ошибка:
При слиянии на столбце с разными типами данных (например, строки и числа) результат может быть пустым. Всегда стоит проверять типы ключевых столбцов.
Как применить функцию к столбцу или каждой строке?
Метод apply позволяет вызывать пользовательскую функцию для Series или DataFrame.
df['age_squared'] = df['age'].apply(lambda x: x**2)
print(df[['name','age','age_squared']])первичный анализ данных python (первичный анализ данных в python)
name age age_squared 0 Alice 25 625 1 Bob 30 900 2 Charlie 35 1225
Производительность:
Использование apply с пользовательской функцией медленнее векторизованных операций. Если возможно, лучше применять встроенные методы (например, df['age']**2) или numpy-функции.
Общие проблемы при работе с NumPy и Pandas:
- Broadcasting – несовпадение размеров массивов может привести к неожиданным результатам или ошибкам. Перед операциями полезно проверять shape.
- SettingWithCopyWarning – возникает при изменении копии вместо оригинала. Для подавления используйте .copy() или цепочки операций.
- Изменение размера – попытка изменить форму массива, когда количество элементов не соответствует, вызывает ошибку. Используйте reshape с учётом размерности.
Расширенные примеры использования NumPy и Pandas
Продвинутые техники
Broadcasting в NumPy
Broadcasting позволяет выполнять операции между массивами разной формы без явного повторения данных.
import numpy as np
A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([10, 20, 30])
result = A + B
print(result)[[11 22 33] [14 25 36]]
Массив B (3,) расширяется до (2,3) за счёт повторения по оси строк. Правила broadcasting применяются автоматически, но важно, чтобы размерности были совместимы (хотя бы одна из них равна 1 или отсутствует).
Условная замена с np.where
Функция np.where возвращает элементы из двух массивов в зависимости от условия.
arr = np.array([1, -2, 3, -4, 5])
result = np.where(arr > 0, 'positive', 'negative')
print(result)['positive' 'negative' 'positive' 'negative' 'positive']
Также np.where может возвращать индексы ненулевых элементов: np.where(arr!=0).
Группировка и агрегация в Pandas
Метод groupby позволяет разбить данные на группы и применить несколько агрегатных функций одновременно.
import pandas as pd
df = pd.DataFrame({
'category': ['A', 'B', 'A', 'B', 'A'],
'value': [10, 20, 30, 40, 50]
})
grouped = df.groupby('category')['value'].agg(['sum', 'mean', 'count'])
print(grouped)sum mean count category A 90 30.0 3 B 60 30.0 2
Можно также применять разные функции к разным столбцам с помощью словаря.
Сводные таблицы (pivot_table)
Pivot table создает многомерную сводку, аналогичную Excel.
sales = pd.DataFrame({
'region': ['North', 'South', 'North', 'South'],
'year': [2020, 2020, 2021, 2021],
'sales': [100, 200, 150, 250]
})
pivot = pd.pivot_table(sales, values='sales', index='region', columns='year', aggfunc='sum')
print(pivot)year 2020 2021 region North 100 150 South 200 250
Работа с временными рядами
Pandas предоставляет мощные инструменты для парсинга дат и ресемплинга.
dates = pd.date_range('2023-01-01', periods=6, freq='D')
ts = pd.Series([1,2,3,4,5,6], index=dates)
print('Исходный ряд:')
print(ts)
print('\nСреднее по месяцам:')
print(ts.resample('M').mean())Исходный ряд: 2023-01-01 1 2023-01-02 2 2023-01-03 3 2023-01-04 4 2023-01-05 5 2023-01-06 6 Freq: D, dtype: int64 Среднее по месяцам: 2023-01-31 3.5 Freq: ME, dtype: float64
Ресемплинг поддерживает различные периоды: 'H' (часы), 'W' (недели), 'Q' (кварталы) и т.д.
Многомерные массивы и работа с осями
NumPy поддерживает массивы произвольной размерности. Операции вдоль осей задаются параметром axis.
tensor = np.arange(24).reshape((2, 3, 4))
print('Тензор shape:', tensor.shape)
print('Сумма по оси 1:\n', tensor.sum(axis=1))Тензор shape: (2, 3, 4) Сумма по оси 1: [[12 15 18 21] [48 51 54 57]]
Понимание оси важно при сжатии или расширении размерностей (например, np.expand_dims).