Python数据框列表-如何使数组中的元素数相等

时间:2018-10-07 07:05:31

标签: python

我有一个数据框,其中列表在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列表来实现这一目标?

1 个答案:

答案 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将允许在每个单独的行/列表中使用一致的数据类型。