Mehrere Werte mit einem Trennzeichen in einem Eintrag

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
MacGruber
User
Beiträge: 21
Registriert: Sonntag 28. Mai 2017, 13:04

Freitag 14. Februar 2020, 12:28

Hallo werte Forumsmitglieder,

Thema meines heutigen Hilferufs lässt sich der sich wohl am ehesten dem der Datenverarbeitung zuordnen. Folgendes Problem habe ich dabei. Ich habe eine CSV mit nur drei Spalten, aber dafür mit mehreren Millionen Zeilen. Meine Spalten lauten wie folgt:
  • Komponente (String-Werte)
  • Menge (Integer-Werte
  • Merkmal (String-Werte)
Jetzt zu meinem Problem. Während für Komponente und Menge in jeder Zeile nur ein Wert genannt wird, kann bei Merkmal ein Wert oder gleich mehrere Werte genannt werden. Bei Mehrfachnennung dient das Semikolon als Trennzeichen. Ich würde gerne mit Pandas die CSV als Dataframe einladen und immer bei jeder Zeile, die über mehrere Merkmalwerte pro Zeile verfügt, die Werte auftrennen und über mehrere Zeilen aufteilen. Die Einträge für Komponente und Menge sollen in diesen neuen Zeilen dann natürlich auch enthalten sein.


Vorher:
Komponente Menge Merkmal
K1 5 M1
K2 6 M1;M2;M4
K3 2 M3

Nachher:
Komponente Menge Merkmal
K1 5 M1
K2 6 M1
K2 6 M2
K2 6 M4
K3 2 M3

Bislang ist mir noch keine Lösung einfallen und Recherchen haben auch nichts ergegeben. Am liebsten würde ich das mit Pandas und irgendwelchen Dataframe Methoden machen, da der Importvorgang der CSV auch über Pandas läuft. Mit Listen und Schleifenoperation bin ich zwar in der Lage mir das Problem selber zu lösen, aber lieber würde ich eine nachhalteige Methode kennen lernen mit der ich in Zukunft Probleme dieser Art immer wieder schnell lösen kann.

Ich danke jetzt schon für eure Hilfe.

Gruß Sascha
Benutzeravatar
__blackjack__
User
Beiträge: 5544
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 14. Februar 2020, 13:44

Du suchst 💥:

Code: Alles auswählen

In [318]: df                                                                    
Out[318]: 
  Komponente  Menge   Merkmal
0         K1      5        M1
1         K2      6  M1;M2;M4
2         K3      2        M3

In [319]: df["Merkmal"] = df["Merkmal"].str.split(";")                          

In [320]: df                                                                    
Out[320]: 
  Komponente  Menge       Merkmal
0         K1      5          [M1]
1         K2      6  [M1, M2, M4]
2         K3      2          [M3]

In [321]: df.explode("Merkmal")                                                 
Out[321]: 
  Komponente  Menge Merkmal
0         K1      5      M1
1         K2      6      M1
1         K2      6      M2
1         K2      6      M4
2         K3      2      M3
long long ago; /* in a galaxy far far away */
__deets__
User
Beiträge: 7707
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 14. Februar 2020, 13:45

Ich bin immer wieder fasziniert, was das Ding alles eingebaut hat. Und wie zur Hoelle man das jemals finden soll...
MacGruber
User
Beiträge: 21
Registriert: Sonntag 28. Mai 2017, 13:04

Freitag 14. Februar 2020, 14:53

Genial. Vielen lieben Dank. Das hilft mir enorm weiter :)
Antworten