Подтвердить что ты не робот

Преобразование выбранных столбцов в Pandas Dataframe to Numpy Array

Я хотел бы преобразовать все, кроме первого столбца pandas dataframe, в массив numpy. По какой-то причине использование параметра columns= DataFrame.to_matrix() не работает.

ДФ:

  viz  a1_count  a1_mean     a1_std
0   n         3        2   0.816497
1   n         0      NaN        NaN 
2   n         2       51  50.000000

Я пробовал X=df.as_matrix(columns=[df[1:]]), но это дает массив всех NaN s

4b9b3361

Ответ 1

Параметр columns принимает коллекцию имен столбцов. Вы передаете список, содержащий блок данных с двумя строками:

>>> [df[1:]]
[  viz  a1_count  a1_mean  a1_std
1   n         0      NaN     NaN
2   n         2       51      50]
>>> df.as_matrix(columns=[df[1:]])
array([[ nan,  nan],
       [ nan,  nan],
       [ nan,  nan]])

Вместо этого передайте нужные имена столбцов:

>>> df.columns[1:]
Index(['a1_count', 'a1_mean', 'a1_std'], dtype='object')
>>> df.as_matrix(columns=df.columns[1:])
array([[  3.      ,   2.      ,   0.816497],
       [  0.      ,        nan,        nan],
       [  2.      ,  51.      ,  50.      ]])

Ответ 2

простым способом является свойство "values" df.iloc[:,1:].values

a=df.iloc[:,1:]
b=df.iloc[:,1:].values

print(type(df))
print(type(a))
print(type(b))

поэтому вы можете получить тип

<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'numpy.ndarray'>

Ответ 3

Лучший способ конвертировать в Numpy Array - использовать '.to_numpy (self, dtype = None, copy = False)'. Это новое в версии 0.24.0. Refrence

Вы также можете использовать ".array". Refrence

Панды .as_matrix устарела с версии 0.23.0.

Ответ 4

Самый быстрый и простой способ - использовать .as_matrix(). Одна короткая строка:

df.iloc[:,[1,2,3]].as_matrix()

дает:

array([[3, 2, 0.816497],
   [0, 'NaN', 'NaN'],
   [2, 51, 50.0]], dtype=object)

Используя индексы столбцов, вы можете использовать этот код для любого фрейма данных с разными именами столбцов.

Вот шаги для вашего примера:

import pandas as pd
columns = ['viz', 'a1_count', 'a1_mean', 'a1_std']
index = [0,1,2]
vals = {'viz': ['n','n','n'], 'a1_count': [3,0,2], 'a1_mean': [2,'NaN', 51], 'a1_std': [0.816497, 'NaN', 50.000000]}
df = pd.DataFrame(vals, columns=columns, index=index)

дает:

   viz  a1_count a1_mean    a1_std
0   n         3       2  0.816497
1   n         0     NaN       NaN
2   n         2      51        50

Затем:

x1 = df.iloc[:,[1,2,3]].as_matrix()

дает:

array([[3, 2, 0.816497],
   [0, 'NaN', 'NaN'],
   [2, 51, 50.0]], dtype=object)

Где x1 это numpy.ndarray.