Преобразование DataFrame Pandas в массив NumPy
Как преобразовать DataFrame Pandas в массив NumPy?
Я создал DataFrame с помощью библиотеки Pandas и теперь мне нужно преобразовать его в массив NumPy. Вот как выглядит мой DataFrame:
import numpy as np
import pandas as pd
df = pd.DataFrame(
{
'A': [np.nan, np.nan, np.nan, 0.1, 0.1, 0.1, 0.1],
'B': [0.2, np.nan, 0.2, 0.2, 0.2, np.nan, np.nan],
'C': [np.nan, 0.5, 0.5, np.nan, 0.5, 0.5, np.nan],
},
index=[1, 2, 3, 4, 5, 6, 7],
).rename_axis('ID')
Результирующий DataFrame выглядит следующим образом:
A B C
ID
1 NaN 0.2 NaN
2 NaN NaN 0.5
3 NaN 0.2 0.5
4 0.1 0.2 NaN
5 0.1 0.2 0.5
6 0.1 NaN 0.5
7 0.1 NaN NaN
Я хочу преобразовать этот DataFrame в массив NumPy, чтобы он выглядел следующим образом:
array([[ nan, 0.2, nan],
[ nan, nan, 0.5],
[ nan, 0.2, 0.5],
[ 0.1, 0.2, nan],
[ 0.1, 0.2, 0.5],
[ 0.1, nan, 0.5],
[ 0.1, nan, nan]])
Также, возможно ли сохранить типы данных, чтобы массив выглядел так:
array([[ 1, nan, 0.2, nan],
[ 2, nan, nan, 0.5],
[ 3, nan, 0.2, 0.5],
[ 4, 0.1, 0.2, nan],
[ 5, 0.1, 0.2, 0.5],
[ 6, 0.1, nan, 0.5],
[ 7, 0.1, nan, nan]],
dtype=[('ID', '<i4'), ('A', '<f8'), ('B', '<f8'), ('C', '<f8')])
Как мне это сделать?
5 ответ(ов)
Чтобы преобразовать DataFrame pandas (df) в массив numpy ndarray, используйте следующий код:
df.values
Это возвращает массив в следующем формате:
array([[nan, 0.2, nan],
[nan, nan, 0.5],
[nan, 0.2, 0.5],
[0.1, 0.2, nan],
[0.1, 0.2, 0.5],
[0.1, nan, 0.5],
[0.1, nan, nan]])
Если вам нужен конкретный столбец, вы можете сделать это следующим образом:
df['column'].values
Примечание: Метод .as_matrix()
, использованный в этом ответе, устарел. В версии Pandas 0.23.4 выдается предупреждение:
Метод
.as_matrix
будет удален в будущих версиях. Используйте .values вместо.
В Pandas есть встроенный метод для этого...
numpy_matrix = df.as_matrix()
возвращает
array([[nan, 0.2, nan],
[nan, nan, 0.5],
[nan, 0.2, 0.5],
[0.1, 0.2, nan],
[0.1, 0.2, 0.5],
[0.1, nan, 0.5],
[0.1, nan, nan]])
Для получения массива NumPy вместо устаревшего метода .as_matrix()
используйте метод .values
, который работает аналогичным образом:
numpy_matrix = df.values
Этот способ продолжает корректно осуществлять преобразование вашего DataFrame в массив NumPy.
Попробуйте использовать следующий код:
a = numpy.asarray(df)
Этот метод преобразует объекты DataFrame из библиотеки pandas в массив NumPy. Убедитесь, что библиотека NumPy импортирована в вашем коде, добавив строку import numpy
. Если у вас возникнут другие вопросы или проблемы, не стесняйтесь их задавать!
Чтобы преобразовать DataFrame в массив NumPy, можно использовать следующий подход:
import numpy as np
import pandas as pd
# Создание примерного DataFrame
data = {
'gbm': [12.097439, 12.109811, 11.720734, 11.824557, 11.800868, 12.490984],
'nnet': [12.047437, 12.070209, 11.622139, 11.926414, 11.727730, 12.502440],
'reg': [12.100953, 12.095288, 11.740523, 11.926527, 11.729737, 12.530894]
}
df = pd.DataFrame(data)
# Преобразование DataFrame в массив NumPy
result = np.array(df.to_records().view(type=np.matrix))
print(result)
Этот код создаёт DataFrame с данными и затем преобразует его в массив NumPy. В результате вы получите массив с типом numpy.record
, который содержит индексы и значения колонок gbm
, nnet
, и reg
.
Результат преобразования будет выглядеть примерно так:
array([[(0, 12.097439 , 12.047437, 12.100953),
(1, 12.10981081, 12.070209, 12.095288),
(2, 11.72073428, 11.622139, 11.740523),
(3, 11.82455653, 11.926414, 11.926527),
(4, 11.80086775, 11.72773 , 11.729737),
(5, 12.49098389, 12.50244 , 12.530894)]],
dtype=(numpy.record, [('index', '<i8'), ('gbm', '<f8'), ('nnet', '<f4'), ('reg', '<f8')]))
Таким образом, вы получите удобный образец для дальнейшей работы с вашими данными в формате массива NumPy.
Вы можете преобразовать DataFrame в его представление в виде массива Numpy двумя способами:
Используя метод
as_matrix()
:mah_np_array = df.as_matrix(columns=None)
Обратите внимание, что метод
as_matrix()
устарел в последних версиях Pandas, и его использование не рекомендуется.Используя атрибут
values
:mah_np_array = df.values
Этот способ является более современным и рекомендуемым для получения массива Numpy из DataFrame.
Для получения дополнительной информации о методах работы с DataFrame, вы можете обратиться к документации Pandas.
Создание нового столбца на основе значений других столбцов / Применение функции к нескольким столбцам построчно в Pandas
Создание DataFrame в Pandas путём последовательного добавления строк
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Как проверить, пустой ли DataFrame в pandas?