Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

168
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!