Преобразование выбранных столбцов в 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
Ответы
Ответ 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
.