Tengo un DataFrame con las siguientes columnas:
columns = ['Autor', 'Preţul', 'Suprafaţa totală', 'Etaj', 'Etaje', 'Tipul casei', 'Tipul de camere','Numărul de camere','Starea apartamentului', 'Planificare', 'Tipul clădirii', 'Sectorul', 'Strada', 'Numărul casei'] df = pd.DataFrame(columns=columns) Quiero agregar a este DataFrame una cantidad de diccionarios fila por fila, por ejemplo, para la primera fila quiero agregar este diccionario:
{'Autor': nan, 'Balcon/lojă': '2', 'Etaj': '1', 'Grup sanitar': 'separat', 'Locul de amplasare în casă': 'In mijlocul casei', 'Numărul casei': nan, 'Numărul de camere': '4 şi mai multe camere', 'Parcare': 'deschisă', 'Preţul': nan, 'Sectorul': nan, 'Strada': nan, 'Suprafaţa totală': '90 m²', 'Tipul clădirii': 'Dat în exploatare'} Los valores de las claves del diccionario que no están en las columnas de DataFrame deben establecerse como valores NaN . Los diccionarios tenían solo una parte de los nombres de las columnas como claves.
por ejemplo, el segundo dict:
{'Autor': nan, 'Numărul casei': nan, 'Numărul de camere': '3 camere', 'Preţul': nan, 'Sectorul': nan, 'Strada': nan, 'Suprafaţa totală': '103 m²', 'Tipul clădirii': 'Dat în exploatare'}Los diccionarios son el resultado de un bucle for y deben agregarse como una fila única.
Utilice el constructor alternativo pandas.DataFrame.from_dict . Cree sus "filas" en una lista para comenzar:
In [22]: import numpy as np In [23]: nan = np.nan In [24]: rows = [] In [25]: rows.append({'Autor': nan, ...: 'Balcon/lojă': '2', ...: 'Etaj': '1', ...: 'Grup sanitar': 'separat', ...: 'Locul de amplasare în casă': 'In mijlocul casei', ...: 'Numărul casei': nan, ...: 'Numărul de camere': '4 şi mai multe camere', ...: 'Parcare': 'deschisă', ...: 'Preţul': nan, ...: 'Sectorul': nan, ...: 'Strada': nan, ...: 'Suprafaţa totală': '90 m²', ...: 'Tipul clădirii': 'Dat în exploatare'}) In [26]: rows.append({'Autor': nan, ...: 'Numărul casei': nan, ...: 'Numărul de camere': '3 camere', ...: 'Preţul': nan, ...: 'Sectorul': nan, ...: 'Strada': nan, ...: 'Suprafaţa totală': '103 m²', ...: 'Tipul clădirii': 'Dat în exploatare'})Luego, solo asegúrese de pasar el argumento "orientar" apropiado:
In [28]: pd.DataFrame.from_dict(rows, orient='columns') Out[28]: Autor Balcon/lojă Etaj Grup sanitar Locul de amplasare în casă \ 0 NaN 2 1 separat In mijlocul casei 1 NaN NaN NaN NaN NaN Numărul casei Numărul de camere Parcare Preţul Sectorul Strada \ 0 NaN 4 şi mai multe camere deschisă NaN NaN NaN 1 NaN 3 camere NaN NaN NaN NaN Suprafaţa totală Tipul clădirii 0 90 m² Dat în exploatare 1 103 m² Dat în exploatareEDITAR
En realidad, acabo de notar que el constructor normal funciona bien y no necesita ningún argumento.
In [31]: pd.DataFrame(rows) Out[31]: Autor Balcon/lojă Etaj Grup sanitar Locul de amplasare în casă \ 0 NaN 2 1 separat In mijlocul casei 1 NaN NaN NaN NaN NaN Numărul casei Numărul de camere Parcare Preţul Sectorul Strada \ 0 NaN 4 şi mai multe camere deschisă NaN NaN NaN 1 NaN 3 camere NaN NaN NaN NaN Suprafaţa totală Tipul clădirii 0 90 m² Dat în exploatare 1 103 m² Dat în exploatarePuede recorrer los diccionarios, agregar los resultados de cada diccionario a una lista y luego agregar la lista como una fila en el DataFrame.
dflist = [] for dic in dictionarylist: rlist = [] for key in keylist: if dic[key] is None: rlist.append(None) else: rlist.append(dic[key]) dflist.append(rlist) df = pd.DataFrame(dflist)Si sus datos de dictado están en una columna DF, entonces lo siguiente funciona bien.
recs = [] for index, row in df.iterrows(): val = ast.literal_eval(row[col_name]) recs.append(val) df2 = pd.DataFrame.from_dict(recs)