python - 从嵌套字典到扁平化数据框

标签 python json pandas dictionary

我在这里做了一个噩梦。我尝试了 flatten_dict、MutableMapping、导出到 json 尝试读取它并清理等等。没有任何效果。

所以,我有 720 行,如下所示:

"{'utilidad neta': 954700.2, 'gastos operacionales': {'total': 32505631.93, 'gastos administrativos': 24734891.6, 'provisión y castigo de cartera': 0.0, 'gastos de venta': 7770740.33, 'costos operativos': 0.0}, 'costo de ventas': {'costo servicios': 0.0, 'total': 20084030.38, 'costo mercancÃ\xada vendida': 20084030.38}, 'utilidad antes de impuestos': 954700.2, 'otros egresos': {'total': 5026105.03, 'pérdida en venta de activos': 0.0, 'financieros': 5026105.03, 'diferencia en cambio': 0.0, 'donaciones': 0.0}, 'impuestos': {'total': 0.0, 'impuestos sobre la renta': 0.0, 'cree': 0.0}, 'utilidad operacional': -2846492.31, 'ingresos operacionales': {'total': 49743170.0, 'devoluciones en ventas': {'total': -552065.0, 'devoluciones no gravadas': 0.0, 'devoluciones gravadas': -552065.0}, 'ventas y servicios': {'total': 50295235.0, 'ventas no gravadas': 342438.0, 'ventas gravadas': 49952797.0, 'servicios': 0.0}}, 'utilidad bruta': 29659139.62, 'ingresos no operacionales': {'total': 8827297.54, 'financieros': -8.46, 'diferencia en cambio': 0.0, 'otros ingresos': {'otros ingresos - (ganancia en venta de activos)': 0.0, 'total': 8827306.0, 'otros ingresos - reintegro de costos y gastos': 8827306.0}}}"
"{'utilidad neta': -48227366.15, 'gastos operacionales': {'total': 39553354.0, 'gastos administrativos': 39553354.0, 'provisión y castigo de cartera': 0.0, 'gastos de venta': 0.0}, 'costo de ventas': {'costo servicios': 0.0, 'total': 45724691.15, 'costo mercancÃ\xada vendida': 45724691.15}, 'utilidad antes de impuestos': -48227366.15, 'otros egresos': {'total': 0.0, 'pérdida en venta de activos': 0.0, 'financieros': 0.0, 'diferencia en cambio': 0.0, 'donaciones': 0.0}, 'impuestos': {'total': 0.0, 'impuestos sobre la renta': 0.0, 'cree': 0.0}, 'utilidad operacional': -23738621.15, 'ingresos operacionales': {'total': 61539424.0, 'devoluciones en ventas': -4040000.0, 'ventas y servicios': 65579424.0}, 'utilidad bruta': 15814732.85, 'ingresos no operacionales': {'total': -24488745.0, 'otros ingresos (ganancia en venta de activos)': 0.0, 'financieros': -24488745.0, 'diferencia en cambio': 0.0}}"

这个想法是构建一个用于建模的数据框架,因此每个项目都必须创建一个名称与嵌套字典的父级相关的列。

输出必须与此类似:

<表类=“s-表”> <标题> Gastos operacionales_total Gastos operacionales_gastos administrativos <正文> 32505631.93 24734891.6 39553354 39553354

如您所见,问题在于并非所有行都具有相同的数据。因此对于每个主题,需要创建一个列。

请您给我解决这个问题的想法。

最佳答案

使用json_normalize通过 literal_eval 将值转换为字典:

import ast

df = pd.json_normalize(df['col'].apply(ast.literal_eval))

print (df)

   utilidad neta  utilidad antes de impuestos  utilidad operacional  \
0      954700.20                    954700.20           -2846492.31   
1   -48227366.15                 -48227366.15          -23738621.15   

   utilidad bruta  gastos operacionales.total  \
0     29659139.62                 32505631.93   
1     15814732.85                 39553354.00   

   gastos operacionales.gastos administrativos  \
0                                   24734891.6   
1                                   39553354.0   

   gastos operacionales.provisión y castigo de cartera  \
0                                                0.0      
1                                                0.0      

   gastos operacionales.gastos de venta  \
0                            7770740.33   
1                                  0.00   

   gastos operacionales.costos operativos  costo de ventas.costo servicios  \
0                                     0.0                              0.0   
1                                     NaN                              0.0   

   costo de ventas.total  costo de ventas.costo mercancía vendida  \
0            20084030.38                               20084030.38   
1            45724691.15                               45724691.15   

   otros egresos.total  otros egresos.pérdida en venta de activos  \
0           5026105.03                                         0.0   
1                 0.00                                         0.0   

   otros egresos.financieros  otros egresos.diferencia en cambio  \
0                 5026105.03                                 0.0   
1                       0.00                                 0.0   

   otros egresos.donaciones  impuestos.total  \
0                       0.0              0.0   
1                       0.0              0.0   

   impuestos.impuestos sobre la renta  impuestos.cree  \
0                                 0.0             0.0   
1                                 0.0             0.0   

   ingresos operacionales.total  \
0                    49743170.0   
1                    61539424.0   

   ingresos operacionales.devoluciones en ventas.total  \
0                                          -552065.0     
1                                                NaN     

   ingresos operacionales.devoluciones en ventas.devoluciones no gravadas  \
0                                                0.0                        
1                                                NaN                        

   ingresos operacionales.devoluciones en ventas.devoluciones gravadas  \
0                                          -552065.0                     
1                                                NaN                     

   ingresos operacionales.ventas y servicios.total  \
0                                       50295235.0   
1                                              NaN   

   ingresos operacionales.ventas y servicios.ventas no gravadas  \
0                                           342438.0              
1                                                NaN              

   ingresos operacionales.ventas y servicios.ventas gravadas  \
0                                         49952797.0           
1                                                NaN           

   ingresos operacionales.ventas y servicios.servicios  \
0                                                0.0     
1                                                NaN     

   ingresos no operacionales.total  ingresos no operacionales.financieros  \
0                       8827297.54                                  -8.46   
1                     -24488745.00                           -24488745.00   

   ingresos no operacionales.diferencia en cambio  \
0                                             0.0   
1                                             0.0   

   ingresos no operacionales.otros ingresos.otros ingresos - (ganancia en venta de activos)  \
0                                                0.0                                          
1                                                NaN                                          

   ingresos no operacionales.otros ingresos.total  \
0                                       8827306.0   
1                                             NaN   

   ingresos no operacionales.otros ingresos.otros ingresos - reintegro de costos y gastos  \
0                                          8827306.0                                        
1                                                NaN                                        

   ingresos operacionales.devoluciones en ventas  \
0                                            NaN   
1                                     -4040000.0   

   ingresos operacionales.ventas y servicios  \
0                                        NaN   
1                                 65579424.0   

   ingresos no operacionales.otros ingresos (ganancia en venta de activos)  
0                                                NaN                        
1                                                0.0            

关于python - 从嵌套字典到扁平化数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73075286/

相关文章:

python - 计算子组中缺失的实例

python - Pandas 在 DF 中选择年终季度

python - 将大数据帧拆分为多个较小的数据帧

python - 无法连接到 Docker 中的 MySql。抛出拒绝访问错误。 Flask-SqlAlchemy

java - Node.JS 正则表达式引擎在大输入时失败

java - Jackson JSON 架构日期

java - json官方java api : JSONArray of JSONObjects

c# - 模型绑定(bind)程序不适用于 JSON POST

python - 如何将python字典转换为pandas中的数据框

python - 删除 pandas 数据框中的所有数据