CSV-Datei(en) verarbeiten

Als Beispieldaten werden die vorläufigen Wahlergebnisse der Landtagswahl Brandenburg 2019 verwendet.

Quelle: https://opendata.potsdam.de/explore/dataset/lwerst2019/export/

import pandas as pd
df = pd.read_csv('./lwzweit2019.csv', delimiter=";")
df.head()
#df.shape
Nr Wahlkreis Name Wahlb. insges. Wähler Ungült. Zweitstimmen Gültige Zweitstimmen SPD CDU DIE LINKE AfD GRÜNE/B 90 BVB / FREIE WÄHLER PIRATEN FDP ÖDP Tierschutzpartei V-Partei³ Sonstige
0 1302 19 Bornstedt - Fliederweg 1183 635 4 631 175 76 86 94 121 22 2 31 7 15 2 0
1 1304 19 Bornstedt - Kirschallee/Thaerstr. 1259 697 4 693 176 111 59 102 154 15 2 54 7 12 1 0
2 1309 19 Bornstedt - A.-Wolff-Platz/E.-Arendt-Str 1742 847 2 845 196 108 82 78 239 26 9 59 18 24 6 0
3 1401 19 Sacrow 109 60 0 60 16 12 8 8 11 2 0 0 0 3 0 0
4 1502 19 Eiche - Kaiser-Friedrich-Str. Süd 757 335 3 332 82 40 51 68 55 8 1 14 4 8 1 0
# Nochmal ohne Header falls keine Headerzeile vorhanden ist
# dann wird durchnummeriert wie hier zu sehen.
df = pd.read_csv('./lwzweit2019.csv', delimiter=";", header=None)
df.head()
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
0 Nr Wahlkreis Name Wahlb. insges. Wähler Ungült. Zweitstimmen Gültige Zweitstimmen SPD CDU DIE LINKE AfD GRÜNE/B 90 BVB / FREIE WÄHLER PIRATEN FDP ÖDP Tierschutzpartei V-Partei³ Sonstige
1 1302 19 Bornstedt - Fliederweg 1183 635 4 631 175 76 86 94 121 22 2 31 7 15 2 0
2 1304 19 Bornstedt - Kirschallee/Thaerstr. 1259 697 4 693 176 111 59 102 154 15 2 54 7 12 1 0
3 1309 19 Bornstedt - A.-Wolff-Platz/E.-Arendt-Str 1742 847 2 845 196 108 82 78 239 26 9 59 18 24 6 0
4 1401 19 Sacrow 109 60 0 60 16 12 8 8 11 2 0 0 0 3 0 0
# andere Zeile als Header
df = pd.read_csv('./lwzweit2019.csv', delimiter="|", header=3)
df.head()
1309;19;Bornstedt - A.-Wolff-Platz/E.-Arendt-Str;1742;847;2;845;196;108;82;78;239;26;9;59;18;24;6;0
0 1401;19;Sacrow;109;60;0;60;16;12;8;8;11;2;0;0;...
1 1502;19;Eiche - Kaiser-Friedrich-Str. Süd;757;...
2 1503;19;Eiche - Altes Rad West/Lindstedter Str...
3 1601;19;Grube;345;210;3;207;52;31;18;37;42;13;...
4 1701;19;Golm - Ehrenpfortenbergstr.;786;450;6;...
# Auswahl Spalten
df = pd.read_csv('./lwzweit2019.csv', delimiter=";", usecols=['Wahlkreis', 'Name', 'Wahlb. insges.'])
#df.style.set_properties(**{'text-align': 'left'})
df.head()
Wahlkreis Name Wahlb. insges.
0 19 Bornstedt - Fliederweg 1183
1 19 Bornstedt - Kirschallee/Thaerstr. 1259
2 19 Bornstedt - A.-Wolff-Platz/E.-Arendt-Str 1742
3 19 Sacrow 109
4 19 Eiche - Kaiser-Friedrich-Str. Süd 757
# leere Einträge behandeln
df = pd.read_csv('./lwzweit2019.csv', delimiter=";",
                 usecols=['Wahlkreis', 'Name'],
                 na_values=[''])
df.head()
Wahlkreis Name
0 19 Bornstedt - Fliederweg
1 19 Bornstedt - Kirschallee/Thaerstr.
2 19 Bornstedt - A.-Wolff-Platz/E.-Arendt-Str
3 19 Sacrow
4 19 Eiche - Kaiser-Friedrich-Str. Süd
# leere Zeilen importieren
# leere Zeilen werden ignoriert, wenn notwendig, das Standardverhalten deaktivieren
df = pd.read_csv('./lwzweit2019.csv', delimiter=";",
                 usecols=['Wahlkreis', 'Name'],
                 na_values=[''],
                 skip_blank_lines=False)
df.head()
df.shape
(217, 2)
# einzelne Zeilen auslassen
df = pd.read_csv('./lwzweit2019.csv', delimiter=";",
                 usecols=['Wahlkreis', 'Name'],
                 na_values=[''],
                 skip_blank_lines=False,
                 skiprows = [1,3,4])
df.head()
Wahlkreis Name
0 19 Bornstedt - Kirschallee/Thaerstr.
1 19 Eiche - Kaiser-Friedrich-Str. Süd
2 19 Eiche - Altes Rad West/Lindstedter Str.
3 19 Grube
4 19 Golm - Ehrenpfortenbergstr.
# Zeilen am Ende weglassen
df = pd.read_csv('./lwzweit2019.csv', delimiter=";",
                 usecols=['Wahlkreis', 'Name'],
                 na_values=[''],
                 skip_blank_lines=False,
                 skiprows = [1,3,4],
                 skipfooter=2, engine='python')
df.head()
df.shape
(212, 2)
# eine begrenzte Anzahl einlesen
df = pd.read_csv('./lwzweit2019.csv', delimiter=";",
                 usecols=['Wahlkreis', 'Name'],
                 na_values=[''],
                 skip_blank_lines=False,
                 skiprows = [1,3,4],
                 #skipfooter=2, engine='python',
                 nrows=20)
df.head()
df.shape
(20, 2)