Как преобразовать объединенный набор данных в dataframe в Python

#python-3.x #list #dataframe #apache-spark-sql

#python-3.x #Список #dataframe #apache-spark-sql

Вопрос:

Это мой список ввода:

 input_data = ['ned','etainclub','codingart','codingman','ksc','imrahelk', 'newbijohn','coinfarmer165','ponzipanda','blockchainstudio','jisoooh0202', 'jamieinthedark','xinnong','bbooaae','onehand','osyvv','bluengel','jungjunghoon','duplicate','lucky2']
 

Я определил функцию predict , и после вызова этой функции для данных я получаю этот результат:

 [{'ned': 'male'}, {'etainclub': 'male'}, {'codingart': 'male'}, {'codingman': 'male'}, {'ksc': 'male'}, {'imrahelk': 'male'}, {'newbijohn': 'male'}, {'coinfarmer165': 'male'}, {'ponzipanda': 'female'}, {'blockchainstudio': 'male'}, {'jisoooh0202': 'male'}, {'jamieinthedark': 'male'}, {'xinnong': 'male'}, {'bbooaae': 'female'}, {'onehand': 'male'}, {'osyvv': 'male'}, {'bluengel': 'male'}, {'jungjunghoon': 'male'}, {'duplicate': 'female'}, {'lucky2': 'male'}]
 

Приведенная ниже таблица является целевым форматом, который я хочу получить из приведенных выше данных:

Имя пол
нед самец
etainclub самец
дублировать Женский
lucky2 самец

Комментарии:

1. Привет, Джуной, добро пожаловать в StackOverflow! Не могли бы вы переформатировать код в вопросе, используя средство форматирования кода в текстовом редакторе?

2. @ebeb9, я обновил. Это нормально?

Ответ №1:

Это predict_output список dicts. Сначала вы можете преобразовать его в список списков, получив элементы каждого элемента dict, а затем передать результат в spark.createDataFrame() :

 import itertools

data = itertools.chain(*[p.items() for p in predict_output])

df = spark.createDataFrame(data, ["name", "gender"])
df.show(5)

# --------- ------ 
#|     name|gender|
# --------- ------ 
#|      ned|  male|
#|etainclub|  male|
#|codingart|  male|
#|codingman|  male|
#|      ksc|  male|
# --------- ------ 
 

Ответ №2:

Альтернативное решение без использования itertools:

 df = spark.createDataFrame(
    [[k,v] for i in predict_output for k,v in i.items()],
    ['name', 'gender']
)