A smal dynamic report of top ten countries worldwide by GDP based on PPP, created in with
Python
dashboard
pandas
Author
Fazliddin Sultonov
Published
Aug 2, 2025
subcribe.html
Tabellarische Daten werden in Büros weltweit am meisten in Tabellenkalkulationen bearbeitet und gespeichert. Bekannteste Software dafür ist Microsoft Excel. Ich bin neulich darauf gestoßen, dass man Python in Excel (ab Microsoft 365) verwenden kann. Und ich hab mir vorgenommen, etwas damit zu probieren. Ich habe ein kleiner dynamischer Bericht in Excel mit Python erstellt, in dem es sich um die zehn Länder weltweit mit dem höchsten BIP auf Basis der Kaufkraftparität handelt.
Um Python in Excel zu verwenden bzw. zu aktivieren, muss man eine Zelle auswählen, in die man die Formel mit Python schreiben will und klickt man auf der Registerkarte > Formeln > Python einfügenoder schreibt man in die Zelle =PY. Dann kann man Python - Code direkt in die Zelle schreiben. Im unten aufgeführten einfachen Beispiel werden die Werte in zwei Zellen (A1 und B1) summiert.
Wichtige Sachen zur Berücksichtigung
Auf die Zellen werden durch xl verwiesen, beispielweise einen Bezug auf Zellen A1:C10 kann durch xl("A1:C10") eingegeben werden
Mehrere Zelle mit Python-Code werden von oben nach unten ausgeführt geschrieben sind.
Zu verarbeitende Daten müssen entweder im Excelsheet stehen oder aus Power Query stammen.
Daten werden durch die Eingabe der Tabellennamen (oder Power Query Namen) gelesen, in der Beispieldatei (kann heruntergeladen werden, sieh oben) ist beispielweise so eingegeben, mit dem Sheetnamen <>, in dem sich die Daten befinden: df = xl("data[#Alle]", headers=True). Durch [#All] werden gesamte Tabelle durch Python-Formel analsiert, bei headers = True werden die Spaltennamen berücksichtigt.
Hier die Daten:
Code
import pandas as pdimport numpy as npfrom IPython.display import display, Markdown, HTML# read file#"C:/Users/sultanov/Documents/blog/projects/data/topten.csv"path ="data/topten.csv"data = pd.read_csv(path, sep=";", decimal=",")df_show = data.sort_values(by ="2024", ascending=False, na_position="last").head(10)#Show the tableMarkdown(df_show.to_markdown(index =False))
Country Name
Country Code
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
China
CHN
1.85775e+13
1.96473e+13
2.09746e+13
2.28625e+13
2.47776e+13
2.57772e+13
2.94382e+13
3.25255e+13
3.55204e+13
3.81901e+13
United States
USA
1.8295e+13
1.88049e+13
1.96121e+13
2.06565e+13
2.154e+13
2.13541e+13
2.36812e+13
2.60069e+13
2.77207e+13
2.91849e+13
India
IND
7.20458e+12
7.79552e+12
8.35471e+12
9.23079e+12
9.93285e+12
9.77102e+12
1.13844e+13
1.31241e+13
1.48459e+13
1.61908e+13
Russian Federation
RUS
3.52624e+12
3.53898e+12
3.8071e+12
4.23184e+12
4.57955e+12
4.65143e+12
5.68827e+12
6.00631e+12
6.47648e+12
6.92125e+12
Japan
JPN
5.20091e+12
5.1589e+12
5.26225e+12
5.34406e+12
5.40446e+12
5.35671e+12
5.57465e+12
5.9304e+12
6.21296e+12
6.40767e+12
Germany
DEU
3.96657e+12
4.24671e+12
4.47259e+12
4.66536e+12
4.92498e+12
4.88037e+12
5.20231e+12
5.66389e+12
5.76347e+12
6.03785e+12
Brazil
BRA
2.98912e+12
2.90789e+12
2.98029e+12
3.18719e+12
3.33378e+12
3.35978e+12
3.78777e+12
4.18023e+12
4.47104e+12
4.73465e+12
Indonesia
IDN
2.6252e+12
2.71576e+12
2.85731e+12
3.06992e+12
3.26619e+12
3.2234e+12
3.53062e+12
3.98307e+12
4.33474e+12
4.66289e+12
France
FRA
2.7229e+12
2.86115e+12
2.97579e+12
3.11488e+12
3.44528e+12
3.34502e+12
3.56292e+12
3.82396e+12
3.98238e+12
4.20156e+12
United Kingdom
GBR
2.76798e+12
2.8923e+12
3.04189e+12
3.12965e+12
3.33588e+12
3.21907e+12
3.41648e+12
3.95784e+12
3.96675e+12
4.19651e+12
Wie oben geschrieben, werden die Zellen mit Python-Coder von oben nach unten ausgeführt. In der Datei, wurden einzelne Schritte in eine Zelle geschrieben. Im Sheet <> sind diese Shritte beschrieben (Spalte A = step). Objectnamen (Spalte B = object) sind die Opbjekte, die durch Python-Codes (Spalte C = result) erstellt wurden. Wie unte auf dem Bild zu sehen ist, wird als erstes Data Frame erstellt (step) namens <> (object) und Python - Code ist in der dementsprechenden Zelle (results).
Danach werden die Daten pivotiert und neues Objekt (df_piv) erstellt, um sie weiter zu bearbeiten.
#> Country Name Country Code years gdp
#> 0 China CHN 2015 1.857751e+13
#> 1 United States USA 2015 1.829502e+13
#> 2 India IND 2015 7.204581e+12
#> 3 Russian Federation RUS 2015 3.526236e+12
#> 4 Japan JPN 2015 5.200905e+12
#> 5 Germany DEU 2015 3.966575e+12
#> 6 Brazil BRA 2015 2.989121e+12
#> 7 Indonesia IDN 2015 2.625202e+12
#> 8 France FRA 2015 2.722896e+12
#> 9 United Kingdom GBR 2015 2.767978e+12
Jetzt können wir aus Data Frame Top-Länder nach GDP für jeweiliges Jahr selectieren (object -> df_10 ) und Rank-Spalte erstellen (object -> df_rank).
#> Country Name Country Code years gdp
#> 1701 China CHN 2024 3.819008e+13
#> 1702 United States USA 2024 2.918489e+13
#> 1703 India IND 2024 1.619082e+13
#> 1704 Russian Federation RUS 2024 6.921249e+12
#> 1705 Japan JPN 2024 6.407672e+12
#> ... ... ... ... ...
#> 3 Russian Federation RUS 2015 3.526236e+12
#> 6 Brazil BRA 2015 2.989121e+12
#> 9 United Kingdom GBR 2015 2.767978e+12
#> 8 France FRA 2015 2.722896e+12
#> 7 Indonesia IDN 2015 2.625202e+12
#>
#> [100 rows x 4 columns]
#> Country Name Country Code years gdp rank
#> 1701 China CHN 2024 3.819008e+13 1.0
#> 1702 United States USA 2024 2.918489e+13 2.0
#> 1703 India IND 2024 1.619082e+13 3.0
#> 1704 Russian Federation RUS 2024 6.921249e+12 4.0
#> 1705 Japan JPN 2024 6.407672e+12 5.0
#> ... ... ... ... ... ...
#> 3 Russian Federation RUS 2015 3.526236e+12 6.0
#> 6 Brazil BRA 2015 2.989121e+12 7.0
#> 9 United Kingdom GBR 2015 2.767978e+12 8.0
#> 8 France FRA 2015 2.722896e+12 9.0
#> 7 Indonesia IDN 2015 2.625202e+12 10.0
#>
#> [100 rows x 5 columns]
prepare data frame for a plot & create a plot for 2024:
Code
# prepare df and format column gdpdf_plt = df_rank.copy()df_plt["gdp"] = df_plt["gdp"]/1_000_000_000_000df_plt = df_plt.round({"gdp" : 2})# select year 2024df = df_plt[df_plt["years"] =="2024"].sort_values(by="rank", ascending=False)# Create Plotplt = df.plot( kind="barh", x="Country Name", y="gdp", title="GDP based on PPP in Bil. US Dollar for 2024" , xlabel="GDP, PPP in Bil. $", ylabel="Top ten countries", legend=False)plt