Python 将Dataframe中的选定列转换为Numpy数组

Python 将Dataframe中的选定列转换为Numpy数组,python,numpy,pandas,Python,Numpy,Pandas,我想将pandas数据帧的第一列以外的所有内容转换为numpy数组。由于某种原因,使用DataFrame.to_matrix()的columns=参数不起作用 df: 我尝试了X=df.as_矩阵(columns=[df[1:]])但是这会产生一个包含所有NaNs的数组columns参数接受一组列名。您正在传递一个包含两行数据帧的列表: >>> [df[1:]] [ viz a1_count a1_mean a1_std 1 n 0 NaN

我想将pandas数据帧的第一列以外的所有内容转换为numpy数组。由于某种原因,使用
DataFrame.to_matrix()
columns=
参数不起作用

df:


我尝试了
X=df.as_矩阵(columns=[df[1:]])
但是这会产生一个包含所有
NaN
s

的数组
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.      ]])
简单的方法是使用“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'>

最快、最简单的方法是使用
.as\u matrix()
。一条短线: 给予: 通过使用列的索引,您可以将此代码用于具有不同列名的任何数据帧。 以下是示例的步骤:

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
array([[3, 2, 0.816497],
   [0, 'NaN', 'NaN'],
   [2, 51, 50.0]], dtype=object)
然后:

给出:

   viz  a1_count a1_mean    a1_std
0   n         3       2  0.816497
1   n         0     NaN       NaN
2   n         2      51        50
array([[3, 2, 0.816497],
   [0, 'NaN', 'NaN'],
   [2, 51, 50.0]], dtype=object)

其中x1是
numpy.ndarray

转换为numpy数组的最佳方法是使用“.to_numpy(self,dtype=None,copy=False)”。它是0.24.0版中的新版本

也可以使用“.array”

Pandas.as_matrix自0.23.0版以来已弃用。

请使用此方法。下面是一个例子--

希望这有帮助。可以使用选择任意数量的列

columns = ['col1', 'col2', 'col3']
df1 = df[columns]

然后将
应用于\u numpy()
方法

希望这个简单的一行有助于:

cols_as_np = df[df.columns[1:]].to_numpy()

您正在传递行而不是列名称。谢谢。我有一种感觉,我遗漏了一些琐碎的东西。我只想补充一点,在未来的版本中,as_矩阵将被删除,我收到的消息称使用.values代替。as_矩阵现在已被弃用。尝试使用
values
代替
as_矩阵
从0.24.0版开始,只需在您的计算机上使用
to_numpy
方法即可列()
>>> import pandas as pd
>>> df = pd.DataFrame({"A":[1, 2], "B":[3, 4], "C":[5, 6]})
>>> df 
    A  B  C
 0  1  3  5
 1  2  4  6
>>> s_array = df[["A", "B", "C"]].to_numpy()
>>> s_array

array([[1, 3, 5],
   [2, 4, 6]]) 

>>> t_array = df[["B", "C"]].to_numpy() 
>>> print (t_array)

[[3 5]
 [4 6]]
columns = ['col1', 'col2', 'col3']
df1 = df[columns]
cols_as_np = df[df.columns[1:]].to_numpy()