我有一个看起来像这样的DF
DF =
index goal features
0 1 [[5.20281045, 5.3353545, 7.343434, ...],[2.33435, 4.2133, ...], ...]]
1 0 [[7.23123213, 1.2323123, 2.232133, ...],[1,45456, 0.2313, 2.23213], ...]]
...
功能列在列表列表中包含大量数字。在多行中其元素的实际数量并不相同,因此我想填写0以创建单个输入,并将列表列表展平为单个列表。
DF_Desired
index goal features
0 1 [5.20281045, 5.3353545, 7.343434, ..., 2.33435, 4.2133, ... , ...]
0 0 [7.23123213, 1.2323123, 2.232133, ..., 1,45456, 0.2313, 2.23213, ...]
这是我的代码:
# Flatten each Lists
flat_list = []
for sublist in data["features"]:
for item in sublist:
flat_list.append(item)
or
flat_list = list(itertools.chain.from_iterable(data["features"]))
我(当然)不能直接在DF中输入flat_list,因为它的长度不匹配“ ValueError:值的长度(478)与索引的长度(2)不匹配”
# Make the Lists equal in length:
length = max(map(len, df["features"]))
X = np.array([xi+[0]*(length-len(xi)) for xi in df["features"])
print(X)
这应该做的是将df [“ features”]的每个像元展平到一个列表中,然后在需要的地方添加0以适合每个列表。但是它只是返回:
[[5.20281045, 5.3353545, 7.343434, ...]
[2.33435, 4.2133, ...]
[...]
...
[7.23123213, 1.2323123, 2.232133, ...]
[1,45456, 0.2313, 2.23213 ...]]
那我到底做错了什么?
您可以将每个列表与一个空列表求和以得到一个平面列表:
DF['features'] = DF.features.apply(lambda x: sum(x, []))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句