如何从 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
从列表中创建一个 pyspark 数据框列,其中列表的长度与数据框的行数相同