Как преобразовать Pandas Dataframe в Numpy массив
-
В метод
to_numpy
для преобразованияDataFrame
вnumpy
массив записей -
to_records()
методу преобразованияDataFrame
в массивnumpy
записи
Мы рассмотрим метод to_numpy()
для преобразования Pythonого DataFrame
в numpy
массив, введенный из панды v0.24.0 вместо старого метода .values
. Мы можем определить to_numpy
на объектах Index
, Series
, и DataFrame
.
Старые DataFrame.values
имеют противоречивое поведение, не рекомендуется использовать согласно документации по pandas API. Однако, мы рассмотрим пример этого метода в случае, если вы используете более старую версию.
Другой старый метод DataFrame.as_matrix()
сейчас устарел, не используйте его!
Мы также представим другой подход, использующий метод DataFrame.to_records()
для преобразования заданного DataFrame
в массив записей numpy
.
В метод to_numpy
для преобразования DataFrame
в numpy
массив записей
Pandas DataFrame
- это 2d табличная структура данных со строками и столбцами. Эта структура данных может быть преобразована в массив numpy
методом to_numpy
:
# python 3.x
import pandas as pd
import numpy as np
df = pd.DataFrame(
data=np.random.randint (
0, 10, (6,4)),
columns=["a", "b", "c", "d"])
nmp=df.to_numpy()
print(nmp)
print(type(nmp))
Вывод:
[[5 5 1 3]
[1 6 6 0]
[9 1 2 0]
[9 3 5 3]
[7 9 4 9]
[8 1 8 9]]
<class 'numpy.ndarray'>
То же самое можно сделать с помощью метода dataframe.values
следующим образом:
# python 3.x
import pandas as pd
import numpy as np
df = pd.DataFrame(
data=np.random.randint(
0, 10, (6,4)),
columns=["a", "b", "c", "d"])
nmp=df.values
print(nmp)
print(type(nmp))
Вывод:
[[8 8 5 0]
[1 7 7 5]
[0 2 4 2]
[6 8 0 7]
[6 4 5 1]
[1 8 4 7]]
<class 'numpy.ndarray'>
Если мы хотим включить indexes
в массив numpy
, нам нужно применить reset_index()
с dataframe.values
:
# python 3.x
import pandas as pd
import numpy as np
df = pd.DataFrame(
data=np.random.randint(
0, 10, (6,4)),
columns=["a", "b", "c", "d"])
nmp=df.reset_index().values
print(nmp)
print(type(nmp))
Вывод:
[[0 1 0 3 7]
[1 8 2 5 1]
[2 2 2 7 3]
[3 3 4 3 7]
[4 5 4 4 3]
[5 2 9 7 6]]
<class 'numpy.ndarray'>
to_records()
методу преобразования DataFrame
в массив numpy
записи
Если вам нужны dtypes
, to_records()
это лучший вариант для использования. Производительность to_numpy()
и to_records()
почти одинакова:
# python 3.x
import pandas as pd
import numpy as np
df = pd.DataFrame(
data=np.random.randint(
0, 10, (6,4)),
columns=["a", "b", "c", "d"])
nmp=df.to_records()
print(nmp)
print(type(nmp))
Вывод:
[(0, 0, 4, 6, 1)
(1, 3, 1, 7, 1)
(2, 9, 1, 6, 4)
(3, 1, 4, 6, 9)
(4, 9, 1, 3, 9)
(5, 2, 5, 7, 9)]
<class 'numpy.recarray'>