Я использую 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 из этого списка, где столбцы являются первым атрибутом (то есть «ФАЙЛ, ИМЯ, ФАМИЛИЯ, ДЕНЬ РОЖДЕНИЯ, НАЦИОНАЛЬНОСТЬ»), а данные - вторым атрибутом.

Как видите, во втором списке нет столбца «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 и Spark DataFrame, если это возможно.

Благодарность!!

2
HELENA PALENZUELA RODRIGUEZ 19 Ноя 2018 в 19:25

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

1
juanpa.arrivillaga 19 Ноя 2018 в 17:05