Построить структуру с использованием pandas Dataframe

Входные данные

import pandas as pd
import numpy as np

a1=["data.country", "data.studentinfo.city","data.studentinfo.name.id.grant"]
a2=["StringType()","StringType()","StringType()"]
d1=pd.DataFrame(list(zip(a1,a2)),columns=['action','type'])

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

StructType([StructField("data", 
    StructType([StructField("country",StringType(),True),
                StructField("studentinfo",
                StructType([StructField("city",StringType(),True),
                    StructField("name",StructType([
                        StructField("id",StructType([
                        StructField("grant",StringType(),True)])
                        )]))    
                ])
            )])
    )])
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На первом этапе создается структура, затем функция преобразует ее в формат:

s = dict()
for _, r in d1.iterrows():
  d = s
  fields = r['action'].split('.')
  for name in fields[:-1]:
    if not name in d:
      d[name] = dict()
    d = d[name]
  d[fields[-1]] = r['type']

def sprint(n):
  children = list()
  for k, v in n.items():
    entry = f'StructField("{k}",'
    if type(v) is dict:
      entry += sprint(v)
    else:
      entry += f'{v},True)'
    children.append(entry)
  return f'StructType([{",".join(children)}])'

print(sprint(s))

Другие вопросы по теме