我目前在一个项目中工作,我必须从表格中提取数据的网页。我的目标是保存这些信息,并应用一些转换来以我的老板可以理解的方式表示这些数据。
我可以提取信息并将其保存在嵌套字典**(1)**中,如下所示
dicionario =
{
'38609-2023':
[
{'Folio': '6', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '20/03/2023', 'Fecha Trámite': 'Resolución', 'Trámite': 'DESE CUENTA', 'Des. Trámite': '210337-2023', 'Correlativo': 'Cuenta (Secretaria)', 'Salas': 'Bloqueado'},
{'Folio': '5', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERT. INHABILIDAD ART. 195 C.O.T', 'Des. Trámite': '209274-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'},
{'Folio': '4', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERT. INHABILIDAD ART. 196 C.O.T', 'Des. Trámite': '209273-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'},
{'Folio': '2', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERTIFICADO DE INGRESO', 'Des. Trámite': '209272-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'}
],
'38451-2023':
[
{'Folio': '5', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '20/03/2023', 'Fecha Trámite': 'Resolución', 'Trámite': 'DESE CUENTA', 'Des. Trámite': '210447-2023', 'Correlativo': 'Cuenta (Secretaria)', 'Salas': 'Bloqueado'},
{'Folio': '4', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERT. INHABILIDAD ART. 195 C.O.T', 'Des. Trámite': '208820-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'},
{'Folio': '2', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERTIFICADO DE INGRESO', 'Des. Trámite': '208819-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'}
]}
因此,我想添加一个新的内部键,使用日期键值**'Año'('Año':'20/03/2023','Año':“17/03/2023”等)。
为了完成这一点,我在第一个字典(1)**中使用以下代码行:
new_dict={}
for keys, values in dicionario.items():
if not keys in new_dict:
new_dict[keys]={}
for value in values:
print(value['Año'], value, keys)
try:
new_dict[keys][value['Año']]
except KeyError:
new_dict[keys][value['Año']] = []
new_dict[keys][value['Año']].append(value)
print(new_dict)
结果会是:
{
'38609-2023':
{
'20/03/2023': [
{'Folio': '6', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '20/03/2023', 'Fecha Trámite': 'Resolución', 'Trámite': 'DESE CUENTA', 'Des. Trámite': '210337-2023', 'Correlativo': 'Cuenta (Secretaria)', 'Salas': 'Bloqueado'
}
],
'17/03/2023': [
{'Folio': '5', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERT. INHABILIDAD ART. 195 C.O.T', 'Des. Trámite': '209274-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'},
{'Folio': '4', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERT. INHABILIDAD ART. 196 C.O.T', 'Des. Trámite': '209273-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'},
{'Folio': '2', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERTIFICADO DE INGRESO', 'Des. Trámite': '209272-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'}
]
},
'38451-2023':
{
'20/03/2023': [
{'Folio': '5', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '20/03/2023', 'Fecha Trámite': 'Resolución', 'Trámite': 'DESE CUENTA', 'Des. Trámite': '210447-2023', 'Correlativo': 'Cuenta (Secretaria)', 'Salas': 'Bloqueado'}
],
'17/03/2023': [
{'Folio': '4', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERT. INHABILIDAD ART. 195 C.O.T', 'Des. Trámite': '208820-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'},
{'Folio': '2', 'Doc.': 'Descargar Documento', 'Anexo': '2023', 'Año': '17/03/2023', 'Fecha Trámite': 'Otro Tramite', 'Trámite': 'CERTIFICADO DE INGRESO', 'Des. Trámite': '208819-2023', 'Correlativo': 'Unidad Ingreso', 'Salas': 'Bloqueado'}]}}
在此之后,我想扁平化嵌套的字典,使其更具可读性
df = pd.DataFrame.from_dict(new_dict, orient="index").stack().to_frame()
final_df = pd.DataFrame(df[0].values.tolist(), index=df.index)
print(final_df)
结果就是这样一个 Dataframe
这一点都不坏。。。但是我想使用行中的键来将其用作列,并使用值来填充每一个新列
第0列替换为:Folio Doc. Anexo Año Fecha Trmite Trmite Des. Trmite Correlativo Salas Estado
第1列替换为:Folio Doc. Anexo Año Fecha Trmite Trmite Des. Trmite Correlativo Salas Estado
第2列替换为:Folio Doc. Anexo Año Fecha Trmite Trmite Des. Trmite Correlativo Salas Estado
我试着用一个小例子更好地解释
我试过使用pd.Dataframe.from_dict,你可以在帖子中看到,但它不起作用。我也试过将嵌套字典转换为json,然后使用pd.json_normalize,但我不能得到我想要的。也使用
有什么想法我可以做什么?…也许在所有列中做一个lambda函数?我真的不知道…我没有太多的expirencie。请帮助我
2条答案
按热度按时间ttisahbt1#
您可以将数据直接加载到pandas中:
它的名字中有“json”,但
.json_normalize
可以在这里解包嵌套的数据:我们可以复制原始index +
id
列并将其添加到结果中:一个三个三个一个
然后可以将
id/ano
设置为索引:rvpgvaaj2#
我想这可以解决你的问题。
您的问题与下面的主题非常相似。链接:Nested dictionary to multiindex dataframe where dictionary keys are column labels
只需在新的dict中对上述主题中的函数进行一点修改,并将其转换为 Dataframe 。
示例代码:
编辑:
我注意到这比上面的解决方案稍微复杂一点,因为你有一个字典,它的项目是字典的列表。
然后,您需要打开该结构以创建数据框。
下面的循环解决了这个问题,但我需要创建一个新的索引k。