将Pandas Dataframe中的Select Columns转换为Numpy Array

时间:2015-08-03 13:52:00

标签: python numpy pandas

我想将除了pandas数据帧的第一列之外的所有内容转换为numpy数组。由于某些原因,使用columns=的{​​{1}}参数无效。

DF:

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:]]) s

的数组

6 个答案:

答案 0 :(得分:56)

简单的方法是“值”属性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'>

答案 1 :(得分:30)

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 :(得分:2)

请使用Pandas 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]

然后应用to_numpy()方法。

答案 3 :(得分:1)

希望这种简单的内衬有帮助:

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

答案 4 :(得分:0)

转换为Numpy数组的最佳方法是使用'.to_numpy(self,dtype = None,copy = False)'。它是0.24.0版的新功能。Refrence

您还可以使用'.array'。Refrence

Pandas .as_matrix自0.23.0版起已弃用。

答案 5 :(得分:-1)

最快,最简单的方法是使用.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的地方。