将pandas数据框转换为numpy数组。

3

我正在使用pandas数据框架来清理和处理数据。然而,为了使用矩阵乘法,我需要将它转换为numpy ndarray。我使用以下方法将数据框架转换为列表:

x = df.tolist()
这将返回以下结构:
[[1, 2], [3, 4], [5, 6], [7, 8] ...]

然后我将它转换成一个numpy数组,代码如下:

x = np.array(x)
然而,以下代码输出结果为:
print(type(x))
print(type(x[0]))

给出以下结果:

'numpy.ndarray'
'numpy.float64'

然而,我需要它们都是numpy数组。如果不是从pandas数据框架中提取的,而只是将硬编码的列表转换为列表,那么它们都是ndarrays。当这个列表是从数据框架中创建时,如何使列表及其内部的列表成为ndarrays?非常感谢您的阅读,这让我困惑了数小时。

3个回答

4

我认为您需要使用values函数:

df = pd.DataFrame({'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0]})

print (df)
   C  D
0  7  1
1  8  3
2  9  5
3  4  7
4  2  1
5  3  0

x = df.values
print (x)
[[7 1]
 [8 3]
 [9 5]
 [4 7]
 [2 1]
 [3 0]]

然后通过索引进行选择:

print (x[:,0])
[7 8 9 4 2 3]

print (x[:,1])
[1 3 5 7 1 0]

print (type(x[:,0]))
<class 'numpy.ndarray'>

还可以对数组进行转置:

x = df.values.T
print (x)
[[7 8 9 4 2 3]
 [1 3 5 7 1 0]]

print (x[0])
[7 8 9 4 2 3]

print (x[1])
[1 3 5 7 1 0]

3

似乎 as_matrix 在 pandas 0.23.0 版本中已被弃用,应该使用 values 替代。 - ratiaris

0
你可以尝试使用 df.get_values(),最终再使用 np.reshape 进行处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,