我有一个包含多个数组的列表,我希望它们具有相同的大小,用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