我在这里做了一个噩梦。我尝试了 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}}"
这个想法是构建一个用于建模的数据框架,因此每个项目都必须创建一个名称与嵌套字典的父级相关的列。
输出必须与此类似:
如您所见,问题在于并非所有行都具有相同的数据。因此对于每个主题,需要创建一个列。
请您给我解决这个问题的想法。
最佳答案
使用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/