Pandas DataFrame — мощный инструмент для анализа и обработки данных, в то время как NumPy array предоставляет эффективную структуру для численных вычислений. Преобразование DataFrame в NumPy array — часто встречающаяся задача в анализе данных и машинном обучении.
Зачем преобразовывать DataFrame в NumPy Array?
- Производительность: NumPy array’s, как правило, более эффективны для численных операций, чем DataFrames.
- Совместимость: Многие библиотеки машинного обучения (например, Scikit-learn) требуют входные данные в формате NumPy array.
- Гибкость: NumPy предоставляет широкий спектр функций для манипулирования массивами.
Краткий обзор DataFrame и NumPy Array
DataFrame — это табличная структура данных с именованными столбцами различных типов. NumPy array — это многомерный массив однородных данных.
Основные методы преобразования DataFrame в NumPy Array
Использование метода .values
Метод .values является самым простым способом преобразования DataFrame в NumPy array. Он возвращает NumPy array, содержащий данные DataFrame.
import pandas as pd
import numpy as np
# Создаем DataFrame
data: dict = {'ad_id': [1, 2, 3, 4, 5],
'clicks': [10, 15, 12, 8, 20],
'impressions': [100, 150, 120, 80, 200]}
df: pd.DataFrame = pd.DataFrame(data)
# Преобразуем DataFrame в NumPy array
array: np.ndarray = df.values
print(type(array))
print(array)
Использование метода .to_numpy()
Метод .to_numpy() является более явным и рекомендуется для использования, так как он предлагает больше контроля над процессом преобразования.
import pandas as pd
import numpy as np
# Создаем DataFrame
data: dict = {'ad_id': [1, 2, 3, 4, 5],
'clicks': [10, 15, 12, 8, 20],
'impressions': [100, 150, 120, 80, 200]}
df: pd.DataFrame = pd.DataFrame(data)
# Преобразуем DataFrame в NumPy array
array: np.ndarray = df.to_numpy()
print(type(array))
print(array)
Сравнение .values и .to_numpy()
.valuesвозвращает NumPy array, который является представлением данных DataFrame. Изменения в array могут отразиться на DataFrame, если array использует ту же память..to_numpy()по умолчанию создает копию данных, что предотвращает нежелательные изменения в DataFrame. Также,.to_numpy()предоставляет аргументы для контроля типа данных и других параметров.
Преобразование DataFrame с разными типами данных
Работа с DataFrame, содержащим только числовые значения
Если DataFrame содержит только числовые значения, преобразование происходит напрямую и без проблем.
Работа с DataFrame, содержащим смешанные типы данных (числа, строки, даты)
Если DataFrame содержит смешанные типы данных, NumPy array будет иметь тип object. Вам может потребоваться преобразовать столбцы к общему типу данных перед преобразованием, например, с помощью astype():
import pandas as pd
import numpy as np
# Создаем DataFrame со смешанными типами данных
data: dict = {'ad_id': [1, 2, 3], 'keyword': ['ключ1', 'ключ2', 'ключ3'], 'ctr': [0.1, 0.2, 0.3]}
df: pd.DataFrame = pd.DataFrame(data)
# Преобразуем столбец 'ctr' к типу float
df['ctr'] = df['ctr'].astype(float)
# Преобразуем DataFrame в NumPy array
array: np.ndarray = df.to_numpy()
print(array.dtype)
print(array)
Обработка пропущенных значений (NaN) при преобразовании
NumPy может обрабатывать NaN значения. Однако, если ваш DataFrame содержит NaN значения, убедитесь, что тип данных NumPy array позволяет их хранить (например, float).
Выбор столбцов при преобразовании
Преобразование только определенных столбцов DataFrame
Часто требуется преобразовать только определенные столбцы DataFrame в NumPy array. Это можно сделать, выбрав столбцы перед преобразованием.
import pandas as pd
import numpy as np
# Создаем DataFrame
data: dict = {'ad_id': [1, 2, 3, 4, 5],
'clicks': [10, 15, 12, 8, 20],
'impressions': [100, 150, 120, 80, 200]}
df: pd.DataFrame = pd.DataFrame(data)
# Выбираем столбцы 'clicks' и 'impressions'
selected_columns: list = ['clicks', 'impressions']
# Преобразуем выбранные столбцы в NumPy array
array: np.ndarray = df[selected_columns].to_numpy()
print(array)
Использование loc и iloc для выбора столбцов
Методы loc (для выбора по метке) и iloc (для выбора по индексу) также могут быть использованы для выбора столбцов.
import pandas as pd
import numpy as np
# Создаем DataFrame
data: dict = {'ad_id': [1, 2, 3, 4, 5],
'clicks': [10, 15, 12, 8, 20],
'impressions': [100, 150, 120, 80, 200]}
df: pd.DataFrame = pd.DataFrame(data)
# Выбираем столбцы по индексу с помощью iloc
array_iloc: np.ndarray = df.iloc[:, [1, 2]].to_numpy() # Выбираем второй и третий столбцы
# Выбираем столбцы по метке с помощью loc
array_loc: np.ndarray = df.loc[:, ['clicks', 'impressions']].to_numpy()
print("iloc:\n", array_iloc)
print("loc:\n", array_loc)
Изменение формы NumPy Array после преобразования
Изменение размерности массива с помощью .reshape()
NumPy array может быть переформирован с помощью метода .reshape(). Важно, чтобы общее количество элементов массива оставалось неизменным.
import pandas as pd
import numpy as np
# Создаем DataFrame
data: dict = {'ad_id': [1, 2, 3, 4, 5, 6],
'clicks': [10, 15, 12, 8, 20, 5]}
df: pd.DataFrame = pd.DataFrame(data)
# Преобразуем DataFrame в NumPy array
array: np.ndarray = df.to_numpy()
# Изменяем форму массива
reshaped_array: np.ndarray = array.reshape((2, 3))
print(reshaped_array)
Сглаживание массива в одномерный массив с помощью .flatten()
Метод .flatten() преобразует многомерный массив в одномерный.
import pandas as pd
import numpy as np
# Создаем DataFrame
data: dict = {'ad_id': [1, 2, 3],
'clicks': [10, 15, 12],
'impressions': [100, 150, 120]}
df: pd.DataFrame = pd.DataFrame(data)
# Преобразуем DataFrame в NumPy array
array: np.ndarray = df.to_numpy()
# Сглаживаем массив
flattened_array: np.ndarray = array.flatten()
print(flattened_array)
Производительность преобразования: сравнение различных методов
Бенчмаркинг .values и .to_numpy() на больших DataFrame
На больших DataFrame, .to_numpy() может быть немного медленнее, чем .values, из-за создания копии данных. Однако, разница в производительности обычно незначительна и .to_numpy() является более безопасным вариантом.
Факторы, влияющие на скорость преобразования
- Размер DataFrame
- Типы данных в DataFrame
- Аппаратное обеспечение
Примеры использования NumPy Array, полученного из DataFrame
Выполнение математических операций с массивом
import pandas as pd
import numpy as np
# Создаем DataFrame
data: dict = {'clicks': [10, 15, 12, 8, 20],
'impressions': [100, 150, 120, 80, 200]}
df: pd.DataFrame = pd.DataFrame(data)
# Преобразуем DataFrame в NumPy array
array: np.ndarray = df.to_numpy()
# Вычисляем CTR (click-through rate)
ctr: np.ndarray = array[:, 0] / array[:, 1] # Делим clicks на impressions
print(ctr)
Использование массива в алгоритмах машинного обучения
NumPy array, полученный из DataFrame, может быть использован в качестве входных данных для алгоритмов машинного обучения, например, в Scikit-learn.
Визуализация данных из массива
NumPy array может быть использован для визуализации данных с помощью библиотек, таких как Matplotlib.
Распространенные ошибки и способы их устранения
Ошибка типа данных при преобразовании
Убедитесь, что типы данных в DataFrame согласованы и могут быть представлены в NumPy array. Используйте astype() для преобразования типов данных.
Несоответствие размеров массива
При использовании .reshape() убедитесь, что новое количество элементов массива соответствует исходному.
Проблемы с пропущенными значениями
Обработайте пропущенные значения (NaN) перед преобразованием или убедитесь, что тип данных NumPy array поддерживает NaN.
Заключение
Краткое повторение основных методов преобразования
.values— простой способ преобразования, но может привести к нежелательным изменениям в DataFrame..to_numpy()— более явный и безопасный способ, рекомендуется для большинства случаев.
Рекомендации по выбору оптимального метода
Используйте .to_numpy(), если вам нужна копия данных или если вы хотите контролировать тип данных NumPy array.
Дальнейшее изучение NumPy и Pandas
Для углубленного изучения NumPy и Pandas рекомендуется ознакомиться с официальной документацией и учебными материалами.