如何从 Python 中不同长度的列表列表中创建数据框?

Posted

技术标签:

【中文标题】如何从 Python 中不同长度的列表列表中创建数据框?【英文标题】:How can I create a data frame from a list of lists with different lengths in Python? 【发布时间】:2018-11-19 16:25:49 【问题描述】:

我正在使用 PySpark Python3 - Spark 2.1.0,并且我有一个不同列表,例如:

lista_archivos = [[['FILE','123.xml'],['NAME','ANA'],['SURNAME','LÓPEZ'],
['BIRTHDATE','05-05-2000'],['NATIONALITY','ESP']], [['FILE','458.xml'],
['NAME','JUAN'],['SURNAME','PÉREZ'],['NATIONALITY','ESP']], [['FILE','789.xml'],
['NAME','PEDRO'],['SURNAME','CASTRO'],['BIRTHDATE','07-07-2007'],['NATIONALITY','ESP']]]

此列表包含不同长度的元素。所以现在,我想从这个列表中创建一个 DataFrame,其中列是第一个属性(即 'FILE、NAME、SURNAME、BIRTHDATE、NATIONALITY),数据是第二个属性。

如您所见,第二个列表没有“BIRTHDATE”列,我需要 DataFrame 在此位置创建带有 NaN 或空格的列。

另外,我需要 DataFrame 是这样的:

FILE      NAME    SURNAME    BIRTHDATE   NATIONALITY
----------------------------------------------------
123.xml    ANA     LÓPEZ     05-05-2000    ESP

458.xml    JUAN    PÉREZ       NaN         ESP

789.xml    PEDRO   CASTRO     07-07-2007   ESP

列表的数据必须在相同的列中。

我已经完成了这段代码,但它看起来不像我想要的表格:

dictOfWords =  i : lista_archivos[i] for i in range(0, len(lista_archivos) ) 
d = dictOfWords
tabla = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in dictOfWords.items() ]))
tabla_final = tabla.transpose()
tabla_final

另外,我已经这样做了:

dictOfWords =  i : lista_archivos[i] for i in range(0, len(lista_archivos) ) 
print(dictOfWords)
tabla = pd.DataFrame.from_dict(dictOfWords, orient='index')
tabla

结果并不好。

如果可能的话,我想要一个 pandas DataFrame 和一个 Spark DataFrame。

谢谢!!

【问题讨论】:

Generate a dataframe from list with different length的可能重复 Creating dataframe from a dictionary where entries have different lengths的可能重复 你想要 pandas DataFrame 还是 spark DataFrame? 【参考方案1】:

以下应该适用于您的情况:

In [5]: lista_archivos = [[['FILE','123.xml'],['NAME','ANA'],['SURNAME','LÓPEZ'],
   ...: ['BIRTHDATE','05-05-2000'],['NATIONALITY','ESP']], [['FILE','458.xml'],
   ...: ['NAME','JUAN'],['SURNAME','PÉREZ'],['NATIONALITY','ESP']], [['FILE','789.xml'],
   ...: ['NAME','PEDRO'],['SURNAME','CASTRO'],['BIRTHDATE','07-07-2007'],['NATIONALITY','ESP']]]

In [6]: pd.DataFrame(list(map(dict, lista_archivos)))
Out[6]:
    BIRTHDATE     FILE   NAME NATIONALITY SURNAME
0  05-05-2000  123.xml    ANA         ESP   LÓPEZ
1         NaN  458.xml   JUAN         ESP   PÉREZ
2  07-07-2007  789.xml  PEDRO         ESP  CASTRO

本质上,您将子列表转换为dict 对象,并将这些列表提供给数据框构造函数。 data-frame 构造函数非常自然地使用 list-of-dicts。

【讨论】:

以上是关于如何从 Python 中不同长度的列表列表中创建数据框?的主要内容,如果未能解决你的问题,请参考以下文章

从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python

如何在python中反转字典并从重复的键值中创建一个列表

如何从包含逗号分隔条目的变量中创建(不同的)值列表?

从列表中创建一个 pyspark 数据框列,其中列表的长度与数据框的行数相同

初学者问题(Python)-如何从列表中删除一定长度的单词[重复]

Python:计算具有不同长度的列表列表中第 n 个元素的平均值