如何将列表列表转换为数据框?(熊猫)

Posted

技术标签:

【中文标题】如何将列表列表转换为数据框?(熊猫)【英文标题】:How to convert list of lists into a dataframe?(pandas) 【发布时间】:2022-01-19 10:17:19 【问题描述】:

我想将这些列表转换成数据框:

col1 = ['', '8465-01-446-8616', '8465-01-538-4334', '8345-01-641-8205', '8465-01-690-3107', '8465-01-526-7827', '', '', '5120-00-097-4136', '6640-00-866-1645']

col2 = [[], ['06222'], ['0N995', '12858'
], ['58367', '58367'], ['4SEN6'], ['0CCM0'], [], [], ['82523', '8BXN8'], ['1KGE8', '725Q0']]

col3 = [[], ['MODEL 703'], ['PMBS9', 'BS-9'], ['24425HBA', '37210'], ['MA66-002'], ['03485'], [], [], ['100250', '5080'], ['09-845C', '4716E20']]


col4 = [[], [''], ['AARDVARK', 'PAULSON MANUFACTURING CORPORAT
ION'], ['WILLARD MARINE, INC.', 'WILLARD MARINE, INC.'], ['CONDOR OUTDOOR PRODUCTS, INC.'], ['CASCADE DESIGNS, INC.'], [], [], ['', 'TELEFLEX LLC'], ['FISHER SCI
ENTIFIC COMPANY L.L.C.', 'THOMAS SCIENTIFIC, LLC']]

预期的数据框:

col1             col2     col3      col4

8465-01-446-8616 06222  MODEL 703   
8465-01-538-4334 0N995  PMBS9      AARDVARK
8465-01-538-4334 12858  BS-9       PAULSON MANUFACTURING CORPORATION
8345-01-641-8205 58367  24425HBA   WILLARD MARINE, INC.
8345-01-641-8205 58367  37210      WILLARD MARINE, INC.
.....................................
...................................

注意:第一行是空的,因为所有第一个元素都是空的。

【问题讨论】:

你能分享你尝试过的东西吗?您期望多维嵌套列表有什么行为? 在嵌套列表中,一个列表链接到col1的单个元素 【参考方案1】:

DataFrame 的构造函数可以采用字典 col_name -> col_values。所以你可以使用:

df = pd.DataFrame('col1': col1, 'col2': col2, 'col3': col3, 'col4': col4)

完成此操作后,最新版本的 Pandas(>= 1.3.0,而当前为 1.3.5)允许 multi-columns explode

df = df.explode(['col2', 'col3', 'col4'])

给予:

               col1   col2       col3                               col4
0                      NaN        NaN                                NaN
1  8465-01-446-8616  06222  MODEL 703                                   
2  8465-01-538-4334  0N995      PMBS9                           AARDVARK
2  8465-01-538-4334  12858       BS-9  PAULSON MANUFACTURING CORPORATION
3  8345-01-641-8205  58367   24425HBA               WILLARD MARINE, INC.
3  8345-01-641-8205  58367      37210               WILLARD MARINE, INC.
4  8465-01-690-3107  4SEN6   MA66-002      CONDOR OUTDOOR PRODUCTS, INC.
5  8465-01-526-7827  0CCM0      03485              CASCADE DESIGNS, INC.
6                      NaN        NaN                                NaN
7                      NaN        NaN                                NaN
8  5120-00-097-4136  82523     100250                                   
8  5120-00-097-4136  8BXN8       5080                       TELEFLEX LLC
9  6640-00-866-1645  1KGE8    09-845C   FISHER SCIENTIFIC COMPANY L.L.C.
9  6640-00-866-1645  725Q0    4716E20             THOMAS SCIENTIFIC, LLC

【讨论】:

ValueError: column must be a scalar when using explode @AtomStore:您的 Pandas 安装版本是什么?我说它需要版本>= 1.3.0 1.2.5是pandas版本 @AtomStore 如果您可以升级,它会起作用...如果您不能,您将不得不手动进行... 只需添加ignore_index=True:df.explode(['col2', 'col3', 'col4'], ignore_index=True)【参考方案2】:

一种选择是使用sum(col1, []) 取消嵌套列表,然后将它们插入到数据框中,如下所示:

import pandas as pd

df = pd.DataFrame(
        'col1': sum(col1, []),
         'col2': sum(col2, []),
         'col3': sum(col3, [])
        )

注意:正如在 cmets 中提出的,sum() 方法会删除空槽,如果需要保留这些空槽,您可以使用这样的列表推导而不是总和:

col1 = [v for s in col1 for v in (s or [''])]

你可以这样做:

df = pd.DataFrame(
        'col1': col1,
         'col2': col2,
         'col3': col3
        )

如果您已对每个列表应用列表理解步骤。

【讨论】:

sum 删除空列表[] 我的错,让我编辑我的答案以考虑到这一点

以上是关于如何将列表列表转换为数据框?(熊猫)的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将文本字符串列表转换为熊猫数据框?

如何将包含元组列表的字典中的字典转换为熊猫数据框

熊猫数据框列有带逗号的字符串如何将其转换为列表[关闭]

如何提高熊猫数据框的列表理解速度

如何将列表分解为多个熊猫数据框

将列表转换为熊猫数据框python [重复]