我有一个数据框,其中列表在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列表来实现这一目标?
答案 0 :(得分:0)
使用纯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']]
另一种方式:使用熊猫,您可以使用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零字符串('0000'
)-如果不需要,您可以将'0000'
替换为0
(整数)出现在此解决方案中。使用整数0
将允许在每个单独的行/列表中使用一致的数据类型。