Pandas и NumPy: библиотеки для анализа данных на Python

Раздел: Data Science -> Pandas и NumPy

Основы работы с 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.0

Python для анализа данных обучение (обучение анализу данных на 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 с учётом размерности.
- работа с табличными данными python (работа с табличными данными в python)
- распределение данных python (распределение данных в python)
- статистический анализ данных python (статистический анализ данных в python)

Расширенные примеры использования 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).

Библиотеки NumPy и Pandas в Python - comments

En
Python библиотеки numpy и pandas (python)