Python Dataframe 列表 - 如何使数组中的元素数量相等

标签 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 列表来完成此任务?

最佳答案

使用纯 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/

相关文章:

python - 在偏移处读入字节数组?

python - 如何运行 traci.start 进行相扑模拟

python - 使用 Scapy 解析数据包字节

python - BeautifulSoup 用 "N/A"填充缺失信息不起作用

python - Django 中未加载模板

python - 如何增加文本小部件中的字体大小?

python - 代码将整数读取为 float

python - 使用 Pythonic 向量化代码在 2D numpy 数组中索引不同大小的范围

python 谷歌应用程序引擎编程

列表中单个元素的 Python struct.pack()?