如何使用 numpy 将 nan 添加到数组的末尾



我有一个包含多个数组的列表,我希望它们具有相同的大小,用nan填充元素较少的数组。我有一些数组有整数,有些数组有字符串。

例如:

a = ['Nike']
b = [1,5,10,15,20]
c = ['Adidas']
d = [150, 2]

我试过了

max_len = max(len(a),len(b),len(c),len(d))
empty = np.empty(max_len - len(a))
a = np.asarray(a) + empty
empty = np.empty(max_len - len(b))
b = np.asarray(b) + empty

我对所有数组都做同样的事情,但是发生了错误(TypeError:只有整数标量数组可以转换为标量索引(

我这样做是因为我想创建一个数据帧,所有数组都是不同的列。

提前谢谢你

这个怎么样?

df1 = pd.DataFrame([a,b,c,d]).T

我建议使用 lists,因为您也有strings.以下是使用zip_longest的一种方法:

from itertools import zip_longest
a, b, c, d = map(list,(zip(*zip_longest(a,b,c,d, fillvalue=float('nan')))))

print(a)
# ['Nike', nan, nan, nan, nan]
print(b)
# [1, 5, 10, 15, 20]
print(c)
# ['Adidas', nan, nan, nan, nan]
print(d)
# [150, 2, nan, nan, nan]

另一种方法是:

max_len = len(max([a,b,c,d], key=len))
a, b, c, d = [l+[float('nan')]*(max_len-len(l)) for l in [a,b,c,d]]

您应该使用 numpy.append(array, value, axis) 附加到数组。在您的示例中,这将是ans = np.append(a,empty).

您可以像这样直接执行此操作:

>>> import pandas as pd
>>> a = ['Nike']
>>> b = [1,5,10,15,20]
>>> c = ['Adidas']
>>> d = [150, 2]
>>> pd.DataFrame([a, b, c, d])
        0    1     2     3     4
0    Nike  NaN   NaN   NaN   NaN
1       1  5.0  10.0  15.0  20.0
2  Adidas  NaN   NaN   NaN   NaN
3     150  2.0   NaN   NaN   NaN

最新更新