Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

169
Vistas
Cambie una columna que contiene una lista de dictados a columnas en un DataFrame

Tengo el siguiente DataFrame que contiene una columna que es una lista de elementos dictados:

 d = pd.DataFrame([ ['Green', [{'Desc:': 'STERLING GREEN SO'}, {'Sec:': '01'}, {'Lot:': 'L0038'}, {'Block:': 'B0008'}]], ['Apply', [{'Desc:': 'STERLING GREEN SO'}, {'Sec:': '01'}, {'Lot:': 'L0038'}, {'Block:': 'B0008'}]], ['Range', [{'Desc:': 'STERLING GREEN SO'}, {'Sec:': '01'}, {'Lot:': 'L0038'}, {'Block:': 'B0008'}]], ['Peop', [{'Desc:': 'STERLING GREEN SO'}, {'Sec:': '01'}, {'Lot:': 'L0038'}, {'Block:': 'B0008'}]] ], columns=['Name', 'Legal Description'])

y quiero transformarlo en un DataFrame simple así:

 d = pd.DataFrame([ ['Green', 'STERLING GREEN SO', '01', 'L0038', 'B0008'], ['Apply', 'STERLING GREEN SO', '01', 'L0038', 'B0008'], ['Range', 'STERLING GREEN SO', '01', 'L0038', 'B0008'], ['Peop', 'STERLING GREEN SO', '01', 'L0038', 'B0008'] ], columns=['Name', 'Legal Description', 'Desc', 'Sec', 'Lot', 'Block'])
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En mi opinión, la solución ideal sería actuar en sentido ascendente y obtener un diccionario o marco de datos con el formato adecuado.

El problema con su lista de diccionarios de una sola clave es que debe fusionarlos. Puede usar una comprensión de diccionario para eso y convertir a Series:

 d2 = d['Legal Description'].apply(lambda c: pd.Series({next(iter(x.keys())).strip(':'): next(iter(x.values())) for x in c}) )

Luego únase al marco de datos original:

 d.drop(columns='Legal Description').join(d2)

producción:

 Name Desc Sec Lot Block 0 Green STERLING GREEN SO 01 L0038 B0008 1 Apply STERLING GREEN SO 01 L0038 B0008 2 Range STERLING GREEN SO 01 L0038 B0008 3 Peop STERLING GREEN SO 01 L0038 B0008
over 4 years ago · Santiago Trujillo Denunciar

0

Si es posible, debe discutir sus datos antes de crear el DataFrame. Es más rápido que remodelar el DataFrame después de crearlo. Por ejemplo, algo como

 data = [ ['Green', [{'Desc:': 'STERLING GREEN SO'}, {'Sec:': '01'}, {'Lot:': 'L0038'}, {'Block:': 'B0008'}]], ['Apply', [{'Desc:': 'STERLING GREEN SO'}, {'Sec:': '01'}, {'Lot:': 'L0038'}, {'Block:': 'B0008'}]], ['Range', [{'Desc:': 'STERLING GREEN SO'}, {'Sec:': '01'}, {'Lot:': 'L0038'}, {'Block:': 'B0008'}]], ['Peop', [{'Desc:': 'STERLING GREEN SO'}, {'Sec:': '01'}, {'Lot:': 'L0038'}, {'Block:': 'B0008'}]] ] records = [] for name, legal_desc in data: rec = {'Name': name} rec.update(x for d in legal_desc for x in d.items()) records.append(rec) d = pd.DataFrame(records)

Producción:

 >>> d Name Desc: Sec: Lot: Block: 0 Green STERLING GREEN SO 01 L0038 B0008 1 Apply STERLING GREEN SO 01 L0038 B0008 2 Range STERLING GREEN SO 01 L0038 B0008 3 Peop STERLING GREEN SO 01 L0038 B0008 >>> records [{'Name': 'Green', 'Desc:': 'STERLING GREEN SO', 'Sec:': '01', 'Lot:': 'L0038', 'Block:': 'B0008'}, {'Name': 'Apply', 'Desc:': 'STERLING GREEN SO', 'Sec:': '01', 'Lot:': 'L0038', 'Block:': 'B0008'}, {'Name': 'Range', 'Desc:': 'STERLING GREEN SO', 'Sec:': '01', 'Lot:': 'L0038', 'Block:': 'B0008'}, {'Name': 'Peop', 'Desc:': 'STERLING GREEN SO', 'Sec:': '01', 'Lot:': 'L0038', 'Block:': 'B0008'}]
over 4 years ago · Santiago Trujillo Denunciar

0

También puedes usar:

 df.set_index('Name', inplace=True) df = df['Legal Description'].explode().apply(pd.Series).groupby(level=0).sum().reset_index()

OUTPUT

 Name Desc: Sec: Lot: Block: 0 Apply STERLING GREEN SO 01 L0038 B0008 1 Green STERLING GREEN SO 01 L0038 B0008 2 Peop STERLING GREEN SO 01 L0038 B0008 3 Range STERLING GREEN SO 01 L0038 B0008
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda