I have this linked XML that has obviously two multiple records sets with top-line items: "Tours" and "Candidats".
You can find the XML at https://www.resultats-elections.interieur.gouv.fr/telechargements/PR2022/resultatsT1/011/077/077001.xml
I want to turn it into a Pandas dataframe that I can read more efficiently and conveniently. I passed the URL into read_xml
like so:
pandas.read_xml("https://www.resultats-elections.interieur.gouv.fr/telechargements/PR2022/resultatsT1/011/077/077001.xml")
Which returns this very incomplete dataframe. The whole data in the XML is not returned in this dataframe. Question: what can I do best to get the whole data into a Pandas dataframe I can work with ?
Type Annee CodReg CodReg3Car LibReg CodDpt \
0 Présidentielle 2022.0 NaN NaN None NaN
1 None NaN 11.0 11.0 Île-de-France 77.0
CodMinDpt CodDpt3Car LibDpt Commune
0 NaN NaN None NaN
1 77.0 77.0 Seine-et-Marne NaN
FYI: I can read this linked XML with Excel and it returns the full dataframe that should contain 13 rows and 33 columns. Excel might simply flattens everything with lots of repetitions, but that would be fine if I could manage to do this with Python.
CodePudding user response:
Couldn't find a way to do it in regular pandas, but luckily there's a package for this. You can install it with:
pip install pandas_read_xml
Afterwards, running this will yield the desired dataframe:
import pandas_read_xml as pdx
df = pdx.read_xml('https://www.resultats-elections.interieur.gouv.fr/telechargements/PR2022/resultatsT1/011/077/077001.xml')
pdx.fully_flatten(df)
Giving you:
Election|Scrutin|Type Election|Scrutin|Annee Election|Departement|CodReg Election|Departement|CodReg3Car Election|Departement|LibReg Election|Departement|CodDpt Election|Departement|CodMinDpt Election|Departement|CodDpt3Car Election|Departement|LibDpt Election|Departement|Commune|CodSubCom ... Election|Departement|Commune|Tours|Tour|Mentions|Exprimes|Nombre Election|Departement|Commune|Tours|Tour|Mentions|Exprimes|RapportInscrit Election|Departement|Commune|Tours|Tour|Mentions|Exprimes|RapportVotant Election|Departement|Commune|Tours|Tour|Resultats|Candidats|Candidat|NumPanneauCand Election|Departement|Commune|Tours|Tour|Resultats|Candidats|Candidat|NomPsn Election|Departement|Commune|Tours|Tour|Resultats|Candidats|Candidat|PrenomPsn Election|Departement|Commune|Tours|Tour|Resultats|Candidats|Candidat|CivilitePsn Election|Departement|Commune|Tours|Tour|Resultats|Candidats|Candidat|NbVoix Election|Departement|Commune|Tours|Tour|Resultats|Candidats|Candidat|RapportExprime Election|Departement|Commune|Tours|Tour|Resultats|Candidats|Candidat|RapportInscrit
0 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 1 ARTHAUD Nathalie Mme 2 0,27 0,22
1 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 2 ROUSSEL Fabien M. 13 1,75 1,41
2 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 3 MACRON Emmanuel M. 206 27,69 22,39
3 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 4 LASSALLE Jean M. 15 2,02 1,63
4 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 5 LE PEN Marine Mme 162 21,77 17,61
5 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 6 ZEMMOUR Éric M. 79 10,62 8,59
6 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 7 MÉLENCHON Jean-Luc M. 124 16,67 13,48
7 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 8 HIDALGO Anne Mme 7 0,94 0,76
8 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 9 JADOT Yannick M. 45 6,05 4,89
9 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 10 PÉCRESSE Valérie Mme 68 9,14 7,39
10 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 11 POUTOU Philippe M. 6 0,81 0,65
11 Présidentielle 2022 11 011 Île-de-France 77 77 077 Seine-et-Marne 001 ... 744 80,87 97,64 12 DUPONT-AIGNAN Nicolas M. 17 2,28 1,85