熊猫系列到2d阵列

时间:2018-02-16 09:13:24

标签: python pandas

所以,我使用Put a 2d Array into a Pandas Series的答案将2D numpy数组放到pandas系列中。 简而言之,它是

a = np.zeros((5,2))
s = pd.Series(list(a))

现在,将pandas系列转换回2D阵列最便宜的方法是什么? 如果我尝试s.values,我会获得带有object dtype的数组数组。

到目前为止,我尝试了np.vstack(s.values)但是它会复制数据。

1 个答案:

答案 0 :(得分:2)

我相信你需要:

a = np.array(s.values.tolist())
print (a)
[[ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]]
a = np.zeros((50000,2))
s = pd.Series(list(a))

In [131]: %timeit (np.vstack(s.values))
10 loops, best of 3: 107 ms per loop

In [132]: %timeit (np.array(s.values.tolist()))
10 loops, best of 3: 19.7 ms per loop

In [133]: %timeit (np.array(s.tolist()))
100 loops, best of 3: 19.6 ms per loop

但如果转置差异很小(但是caching):

a = np.zeros((2,50000))
s = pd.Series(list(a))
#print (s)

In [159]: %timeit (np.vstack(s.values))
The slowest run took 23.31 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 55.7 µs per loop

In [160]: %timeit (np.array(s.values.tolist()))
The slowest run took 7.20 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 49.8 µs per loop

In [161]: %timeit (np.array(s.tolist()))
The slowest run took 7.31 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 62.6 µs per loop