我有一个数据框,其中包含 list 中的列表。每个列表包含整数数组元素。其中一些具有 2 元素,一些具有 3 元素。 python中有没有一种方法可以通过为那些目前没有值的位置分配任何默认值来使这些元素的数量相等。例如,在下面的 df 中,
AS IS
0 [7542, 2313, 7538, 7554, 2313, 1234]
1 [7816, 7554, 5083, 4959, 1234]
2 [7816, 7542, 7816, 7542, 7534, 7535, 7535, 7534]
3 [7150, 7279, 7542, 5673]
4 [7816, 7542, 7542]
5 [7542, 6712, 7542, 7542]
6 [7816, 7542, 7542]
7 [7542, 1237, 6732, 7543]
To BE (by introducing default 0000 (or 0) to make this array structure symmetrc
0 [7542, 2313, 7538, 7554, 2313, 1234, 0000, 0000]
1 [7816, 7554, 5083, 4959, 1234, 0000, 0000, 0000]
2 [7816, 7542, 7816, 7542, 7534, 7535, 7535, 7534]
3 [7150, 7279, 7542, 5673, 0000, 0000, 0000, 0000]
4 [7816, 7542, 7542, 0000, 0000, 0000, 0000, 0000]
5 [7542, 6712, 7542, 7542, 0000, 0000, 0000, 0000]
有没有办法操作 df 列表来完成此任务?
最佳答案
使用纯 Python,您可以获得嵌套列表中的最大列表长度,然后用足够的 0000
元素填充每个条目以匹配最大长度。
max_n = max([len(x) for x in data])
[x+['0000']*(max_n - len(x)) for x in data]
输出:
[[7542, 2313, 7538, 7554, 2313, 1234, '0000', '0000'],
[7816, 7554, 5083, 4959, 1234, '0000', '0000', '0000'],
[7816, 7542, 7816, 7542, 7534, 7535, 7535, 7534],
[7150, 7279, 7542, 5673, '0000', '0000', '0000', '0000'],
[7816, 7542, 7542, '0000', '0000', '0000', '0000', '0000'],
[7542, 6712, 7542, 7542, '0000', '0000', '0000', '0000'],
[7816, 7542, 7542, '0000', '0000', '0000', '0000', '0000'],
[7542, 1237, 6732, 7543, '0000', '0000', '0000', '0000']]
另一种方式:对于 Pandas,您可以使用 fillna()
:
import pandas as pd
df = pd.DataFrame(data)
df.fillna("0000")
0 1 2 3 4 5 6 7
0 7542 2313 7538 7554 2313 1234 0000 0000
1 7816 7554 5083 4959 1234 0000 0000 0000
2 7816 7542 7816 7542 7534 7535 7535 7534
3 7150 7279 7542 5673 0000 0000 0000 0000
4 7816 7542 7542 0000 0000 0000 0000 0000
5 7542 6712 7542 7542 0000 0000 0000 0000
6 7816 7542 7542 0000 0000 0000 0000 0000
7 7542 1237 6732 7543 0000 0000 0000 0000
如果需要,您可以使用.values
移出DataFrame
对象类型。 df.fillna("0000").values
将生成一个嵌套列表。
数据:
data = [[7542, 2313, 7538, 7554, 2313, 1234],
[7816, 7554, 5083, 4959, 1234],
[7816, 7542, 7816, 7542, 7534, 7535, 7535, 7534],
[7150, 7279, 7542, 5673],
[7816, 7542, 7542],
[7542, 6712, 7542, 7542],
[7816, 7542, 7542],
[7542, 1237, 6732, 7543]]
注意:尚不完全清楚您是否真的需要 4-0 字符串 ('0000'
) - 如果不需要,您只需将 '0000'
替换为 0
(整数),它出现在此解决方案中。使用整数 0
将允许在每个单独的行/列表中保持一致的数据类型。
关于Python Dataframe 列表 - 如何使数组中的元素数量相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686241/