将1d数组转换为具有nan值的2d数组

时间:2015-08-03 16:19:34

标签: python numpy series

假设我有一个这样的系列

S1 = Series([[1 , 2 , 3] , [4 , 5 , 6] , np.nan , [0] , [8 ,9 ]])

0    [1, 2, 3]
1    [4, 5, 6]
2          NaN
3          [0]
4       [8, 9]

然后我将从这个系列中创建一个numpy数组

arr1d = S1.values # [[1, 2, 3] [4, 5, 6] nan [0] [8, 9]]
print(arr1d.shape) #(5L,)
print(arr1d.ndim) # 1

是否可以从arr1d创建一个类似于以下

的二维数组
arr2d = np.array([[1 , 2 , 3 ] , [4 , 5 , 6] , 
[np.nan , np.nan , np.nan] , [0 , np.nan , np.nan] , [8 , 9 , np.nan]])

这就是2d阵列的样子

[[  1.   2.   3.]
 [  4.   5.   6.]
 [ nan  nan  nan]
 [  0.  nan  nan]
 [  8.   9.  nan]]

print(arr2d.ndim) # 2
print(arr2d.shape) # (5L, 3L)

解决方案应该与arr1d中的任意数量的元素一起动态工作,这只是数据可能如何的示例

1 个答案:

答案 0 :(得分:0)

不要求效率,但这应该有效:

from itertools import zip_longest

arr2d = np.array(list(zip_longest(*np.atleast_1d(*S1), fillvalue=np.nan))).T


print(arr2d)
print(arr2d.shape)

输出:

[[  1.   2.   3.]
 [  4.   5.   6.]
 [ nan  nan  nan]
 [  0.  nan  nan]
 [  8.   9.  nan]]
(5, 3)