Как я могу создать фрейм данных из списка списков разной длины в Python? - PullRequest
0 голосов
/ 19 ноября 2018

Я использую 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

И результат не очень хороший.

Я бы хотел использовать DataFrame для панд и DataFrame для Spark, если это возможно.

Спасибо !!

1 Ответ

0 голосов
/ 19 ноября 2018

В вашем случае должно работать:

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 объекты и передаете их список в конструктор фрейма данных. Конструктор фрейма данных очень естественным образом работает со списком слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...