CSV mit Pandas Dataframe - wo findet Zerlegung anhand des Delimiters statt?

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

liebe Community

um meine Bemühungen im Bezug auf das Erlernen von Python zu konkretisieren, habe ich mir folgendes Nonsense-Projekt ersonnen:

Ziel ist, die folgende Frage zu beantworten:
Ist eine KI in der Lage, Witze zu machen. Genauer gesagt: Wortspiele und Kalauer.

(vermutlich haben das schlauere Menschen als ich schon längst herausgefunden, aber mir geht's ja eher um den Lernprozess hintendran. Und um die Witze. Natürlich! :))

So und nun habe ich mir folgendes überlegt:
Ich habe eine Liste von Sprichworten und Filmzitaten aus Wikipedia extrahiert und daraus soll nun jeweils eine Liste an Nomen extrahiert werden, die anschließend durch ein Reimwort ersetzt werden.
Diese werden dann in den Sprichworten substituiert und anschließend muss ich mir überlegen, wie man an die Daten zur Klassifikation kommt (Ist es ein guter Witz oder ist es eher ein ganz übler Kalauer)

So und nun zu meinem (technischen) Problem:
Ich habe folgende Daten in einer Datei "Sprueche.txt":

Code: Alles auswählen

W
"Will Gott die Ameis' verderben, lässt er sie Flügel erwrben." - Citatboken, BokförlagetNatur och Kultur, Stockholm, 1967, ISBN 91-27-01681-1
"Willst du was gelten, dann mach dich selten!"
"Wir sind das Volk." - Ostdeutsche Forderung nach Freiheit und Selbstbestimmung, 1989
"Wissen ist Macht." - nach Francis Bacon Meditationes sacrae, 11
"Wo Bacchus das Feuer schürt, sitzt Frau Venus am Ofen."
"Wo das Auge nicht sehen will, helfen weder Licht noch Brill'."
"Wo Du nicht bist, Herr Jesu Christ, da schweigen alle Flöten!"
"Wo Dünkel über den Augen liegt, da kann kein Licht hinein."
"Wo ein Adler nicht fort kann, findet eine Fliege noch zehn Wege."
"Wo ein Wille ist, ist auch ein Weg."
"Wo gehobelt wird, da fallen Späne." - Wander-DSL, Bd. 2, Sp. 688, commons
"Wo kein Kläger, da kein Richter."
"Wo man singet, laß dich ruhig nieder, […] Bösewichter haben keine Lieder." - Johann Gottfried Seume, Die Gesänge. Gedichte, dritte, neuvermehrte und verbesserte Auflage, Wien und Prag (Franz Hans) 1810. S. 272
"Wo nichts ist, hat der Kaiser das Recht verloren." - Wander-DSL, Bd. 2, Sp. 1097, commons
"Wo Rauch ist, da ist auch Feuer."
"Wo viel Licht ist, ist auch viel Schatten." - nach Johann Wolfgang von Goethe, Götz von Berlichingen, Erster Akt; dort "Wo viel Licht ist, ist starker Schatten"
"Worte können tödliche Waffen sein."
"Worten sollten Taten folgen."
"Wovon man nicht sprechen kann, darüber muss man schweigen" - nach Ludwig Wittgenstein, aus: Tractatus logico-philosophicus, Satz 7, Frankfurt am Main 2003, ISBN 3-518-12429-3, Seite 111
X
"Ein Satz mit x: Das war wohl nix."
Y
Z
"Zehn mal Versagen ist besser als einmal Lügen."
"Zuerst der Herr, dann das G'scherr."
"Zu Tode gefürchtet ist auch gestorben."
"Zu viele Köche verderben den Brei." - Wander-DSL, Bd. 5, Sp. 1510, commons. (Dort zitiert als: "Viel Köche versalzen den Brei, deshalb sind auch die Herren mehr für Köchinnen.")
"Zusammen ist man stark."
"Zwei Dumme, ein Gedanke." - Wander-DSL, Bd. 4, Sp. 495, commons. (Dort zitiert als: "Zwei Seelen und ein Gedanke.")
"Zwei Regeln für Erfolg im Leben: erzähle nicht alles."
"Zweimal abgeschnitten und immer noch zu kurz, sagte der Schneider."
"Zwei Tode kann niemand sterben." - Wander-DSL, Bd. 4, Sp. 1244, commons
Diese Liste ist nicht vollständig, sondern nur soweit herunter gedampft, um das "eigentliche Problem" schneller zu sehen.

Wobei es gibt kein Problem im klassischen Sinne, sondern ich kann das Problem durchaus lösen, aber ich möchte gern wissen, warum meine Lösung funktioniert.
Denn aus der Doku bin ich da nicht so recht schau geworden (https://pandas.pydata.org/pandas-docs/s ... d_csv.html)

Ziel ist es, die 1. Spalte zu extrahieren und die nutzlosen Zeilen mit den Einzelbuchstaben zu eleminieren.
(Ob Pandas hier der richtige Weg ist oder ob das vielleicht ein bisschen "over-engeneered ist, sei mal dahingestellt.
Aber ich freue mich selbstverständlich, wenn ihr mir auch dazu ein Feedback gebt.)

Es geht um folgenden Codeschnipsel

Code: Alles auswählen

import pandas as pd

filename = "C:/Users/Buchfink/Documents/Projkete/WortspielGenerator/Sprueche.txt"
df = pd.read_csv(filename, encoding="UTF-8", delimiter="-")
Dies führt zu folgender Fehlermeldung

Code: Alles auswählen

C:\ProgramData\Anaconda3\pythonw.exe C:/Users/Carina/PycharmProjects/pyQT_3/beispielWortspielGenerator.py
Traceback (most recent call last):
  File "C:/Users/Carina/PycharmProjects/pyQT_3/beispielWortspielGenerator.py", line 4, in <module>
    df = pd.read_csv(filename, encoding="UTF-8", delimiter="-")
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 686, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 458, in _read
    data = parser.read(nrows)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 1196, in read
    ret = self._engine.read(nrows)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 2155, in read
    data = self._reader.read(nrows)
  File "pandas\_libs\parsers.pyx", line 847, in pandas._libs.parsers.TextReader.read
  File "pandas\_libs\parsers.pyx", line 862, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas\_libs\parsers.pyx", line 918, in pandas._libs.parsers.TextReader._read_rows
  File "pandas\_libs\parsers.pyx", line 905, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas\_libs\parsers.pyx", line 2042, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 20, saw 6


Process finished with exit code 1
Wenn man sich nun die obigen Daten ansieht, so erkennt man, dass dort eben ein "-" mehr drin ist, wie in der zweiten Zeile.
Es steht ja auch im Meldungstext.

Wenn man nun jedoch stattdessen folgendes schreibt

Code: Alles auswählen

df = pd.read_csv(filename, encoding="UTF-8", delimiter="\" - ", engine="python")
so erhalte ich mein gewünschtes Ergebnis.

Die Frage ist aber: Wie genau funktioniert denn der interne Mechanismus zur Erkennung der Spalten?

Indem ich in die zweite Zeile ein weiteres Minus eingefügt habe, habe ich folgenden Verdacht hinsichtlich des Algorithmus:

Code: Alles auswählen

W
"Will Gott die Ameis' verderben, lässt er sie Flügel erwrben." - Citat-boken, BokförlagetNatur och Kultur, Stockholm, 1967, ISBN 91-27-01681-1
Aus der ersten Zeile schient er die Namen der Columns zu ermitteln und die zweite Zeile wird anscheinend herangezogen, um mittels
Delimiter die Spalten zu ermitteln.
Und wenn dann in Zeile 20 plötzlich eine andere Spaltenzahl aus dem Delimiter ermittelt wird, schlägt er auf.

Ich wollte nun meine Vermutung mittels Debugger prüfen. (Die Wahrheit liegt ja bekanntermaßen "auf dem Platz - äh Verzeihung im Code)
Leider finde ich nicht die Stelle, wo er anhand des Delimiters die Zeile zerlegt....

Der Parser kann noch erstellt werden. Aber die Exception fliegt, wenn der Parser die Zeilen liest.

In der Pandas-Datei parsers.py habe ich hier meinen Haltepunkt gesetzt (siehe Aufrufstack der Fehlermeldung):

Code: Alles auswählen

def _read(filepath_or_buffer: FilePathOrBuffer, kwds):
    """Generic reader of line files."""

[...]
    # Create the parser.
    parser = TextFileReader(fp_or_buf, **kwds)

    if chunksize or iterator:
        return parser

    try:
        data = parser.read(nrows)
    finally:
        parser.close()
sowie in der Datei codecs.py hier:

Code: Alles auswählen

    def read(self, nrows=None):
        try:
            data = self._reader.read(nrows)
        except StopIteration:
            if self._first_chunk:
                self._first_chunk = False
                names = self._maybe_dedup_names(self.orig_names)
                index, columns, col_dict = _get_empty_meta(
                    names,
                    self.index_col,
                    self.index_names,
                    dtype=self.kwds.get("dtype"),
                )
                columns = self._maybe_make_multi_index_columns(columns, self.col_names)
[...]
Leider kann ich nicht sehen, wo _genau_ die Exception fliegt...
ich nutze PyCharm zum Debuggen.

Wo zerlegt er anhand des Delimiters die Zeilen in Spalten?
In die Zeile "data = self._reader.read(nrows)" kann man mit F7 nicht hineinspringen (mir ist es an dieser Stelle jedenfalls nicht gelungen)

Was genau macht die Zeile "except StopIteration:"?
Wenn ich da mit F7 hineindebugge, sprint er direkt zur aufrufenden funktion "ret = self._engine.read(nrows)" zurück (und nicht in den Except-Block, was ich erwartet hätte).
Was mache ich falsch?

Ich bin sehr gespannt auf Eure Antworten und danke Euch schon mal im Voraus.

Bitte sagt mir Bescheid, ob mein Problem verständlich dargelegt ist.

LG
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

Ergänzung:

ich habe meinen Code wie folgt verbessert, da in diesem Kontext eine Konstante als richtiger erscheint - ebenso nutze ich nun Path.

Code: Alles auswählen

import pandas as pd
from pathlib import Path

FILENAME = Path("C:/Users/Buchfink/Documents/Projkete/WortspielGenerator/Sprueche.txt")
df = pd.read_csv(FILENAME, encoding="UTF-8", delimiter="-")
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Buchfink: Ich weiss nicht wie sinnvoll das ist das weiter zu verfolgen, denn es handelt sich weder um eine CSV-Datei, noch hätte die erste Spalte, wenn es denn eine CSV-Datei wäre, etwas in einem Pandas DataFrame zu suchen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@__blackjack__
vielen lieben Dank, dass Du Dir so spät die Zeit genommen hast, meinen ziemlich langen Artikel durchzulesen.
denn es handelt sich weder um eine CSV-Datei,
Nun, ich habe mal die Definition von CSV herausgesucht und komme diesbezüglich zu einem etwas anderen Ergebnis.
Schau mal hier
https://datatracker.ietf.org/doc/html/rfc4180, dort dann Kapitel 2

Der Punkt ist, dass CSV derart schwammig definiert ist, dass jede beliebige Textdatei als CSV interpretiert werden könnte. Theoretisch zumindest :)
Im konkreten Fall ist es so, dass es sich um eine defekte CSV ohne Headerzeile und mit sonderbarem Trennzeichen handelt.

Insbesondere finde ich hier _gerade_ tatsächlich den Fehlerfall interessant. Denn im Feld kommt es durchaus ab und an vor, dass Anwender versehentlich manuell in einer CSV "herumfuhrwerken" oder eine falsche Datei importieren, wo eine "normale" CSV-Datei erwartet wird.
Durch solche Dinge können ja ebenfalls Situationen entstehen, wo man mit einer defekten CSV umgehen muss. Und oft ist da auch die Anforderung, dem Anwender möglichst präzise mittels Fehlermeldung zu sagen, was denn genau nicht stimmt.

Mein Projekt oben ist sicherlich sehr "konstruiert" - aber ich möchte damit auch grob die echten technischen UseCases, die mir so im Kopf herumschwirren, mal durchprobieren. Zumindest, wenn es sich "angelegentlich" ergibt :)

Danke, dass Du meinen Verdacht, dass es hier etwas over-engineered sein könnte, bestätigt hast. Denn mir kam das df auch etwas "schwergewichtig" vor.
Am WE (vorher schaffe ich es nicht) überlege ich mir nochmal was anders.
noch hätte die erste Spalte, wenn es denn eine CSV-Datei wäre, etwas in einem Pandas DataFrame zu suchen.
Warum eigentlich? Wg. des Index?

Liebe Grüße
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

@Buchfink: Nur zur Info, warum du mit dem Debugger nicht richtig an den Code rankommst: Der Traceback verrät schon sehr gut, wo der Fehler auftritt (`pandas._libs.parsers.raise_parser_error`, sogar mit Zeilennummer und Dateiname), aber das ist kein normales Python-Modul, sondern in Cython geschrieben. Hier ist der Code (Zeilennummern stimmen nicht ganz; weil ich deine pandas-Version nicht kenne, ist das die aktuellste).

Ich würde dafür auch nicht pandas nehmen, weil das tendenziell eher auf Zahlen ausgelegt ist und nicht auf Strings. Insbesondere wenn die Eingabedatei – wie __blackjack__ schon schreibt – gar kein richtiges CSV ist. Da ist das Einlesen ohne pandas einfacher, und durch das Dataframe gewinnt man auch nicht so viel.

OT: Was ist der erste Satz denn für ein komisches Sprichwort? Ameisen mit Flügeln sind doch komplett normal?
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@narpfel

ah verstehe, also ich konnte dem Stacktrace aus der Fehlermeldung gestern mit F7 komplett folgen (siehe Codeschnipsel oben) aber da wo die Excpetion fliegt konnte man nicht mehr mittels F7 (PyCharm Debugger) nicht mehr weiter reingucken.
Das mit Cython ging aber in die Richtung, die ich vermutet habe. (Ich kenne ähnlich Sachen, da muss man die Sourcen einbinden, wenn man genauer debuggen muss/will)
Vielen Dank, das ist aber die Info, nach der ich suchte. :)

weil das tendenziell eher auf Zahlen ausgelegt ist und nicht auf Strings
Gut zu wissen. Was würdest Du für diese Art von Daten stattdessen vorschlagen?
gar kein richtiges CSV ist
Was wäre denn Dein Argument? Also warum ist es kein CSV?
Header ist bei CSV nicht Pflicht
Trennzeichen ist auch nicht definiert
Spaltenanzahl ist ebenfalls nicht definiert.
Kannst du mir eine Quelle Deiner Definition für CSV nennen?

zum OT:
gute Frage, ich hab's mal gegoogelt. Ich würde sagen, dass das Abfallend der Flügel bedeutet, dass der Tod der Ameise bevorsteht und der Zweck der Flügel sozusagen erfüllt ist. (Sie ist dann sozusagen eben verdorben :))
Sie beißen sich ihre Flügel ab, wenn diese nicht schon von allein nach der Landung an einer vorgegebenen Sollbruchstelle abgebrochen sind, denn sie werden ihre Flügel ein Leben lang nicht mehr benötigen. Die Männchen haben ihre Aufgabe erfüllt und sterben. Viele werden von ihren Schwestern einfach gefressen.
Quelle: https://www.helpster.de/ameisen-die-flu ... %20starten.

Das ist so ähnlich wie das Verdauen des Hirns bei sessilen Meeresbewohnern. Im Grunde ist es evolutionsbiolgisch so zu interpretieren, dass das Hirn nur "erfunden" wurde, um sich zu bewegen. Vermutlich gibt's bei den Ameisen einen vergleichbaren evolutionären Hintergrund :) Falls ich einen Biologen (morgen) treffe, frage ich mal.

Liebe Grüße
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Buchfink: Das ist kein CSV. Ja die Linie ist etwas schwammig, aber *das* da ist ganz sicher kein CSV.  Es gibt kein sinnvolles Trennzeichen mit dem man das unfallfrei parsen kann und wer auch immer die Daten erzeugt hat, hat dabei sicher nicht daran gedacht, dass das irgendwann einmal einem CSV-Parser vorgeworfen wird. Oder überhaupt jemand versucht das als Tabelle zu sehen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

@Buchfink: Nach der Definition ist alles CSV, deswegen macht es IMHO wenig Sinn, sich da so am Wortlaut festzubeißen. Meine „Definition“ ist, dass CSV nur dann CSV ist, wenn es sinnvolles CSV ist, also nicht nur dem Wortlaut der Spezifikation entspricht, sondern auch dem Geist. Überschriften sind nicht notwendig, Trennzeichen ist beliebig, aber am Ende sollte etwas grob tabellenförmiges rauskommen. Insbesondere wenn man es mit pandas verarbeiten will, weil Dataframes nunmal 2D-Matrizen sind.

Ich sehe deinen Text nicht als CSV, weil es kein Trennzeichen hat, an dem man sinnvoll Spalten auftrennen könnte. `-` kann in beiden „Spalten“ beliebig oft vorkommen. In der ersten ist das okay, weil die mit Anführungszeichen maskiert ist. In der „zweiten“ sind die `-` nicht escapet. ` - ` hat das gleiche Problem.

Und mit `" - ` als Trenner macht man sich die in Anführungszeichen gefasste erste Spalte kaputt, womit diese dann mit einem unsinnigen `"` beginnt.

Zusätzlich natürlich noch die einfachen Buchstaben, die auch nicht sinnvoll in die Tabellenstruktur passen.
Buchfink hat geschrieben: Montag 25. Oktober 2021, 19:15 Gut zu wissen. Was würdest Du für diese Art von Daten stattdessen vorschlagen?
Das kommt darauf an, was du am Ende mit den Daten machen willst. Mein erster Ansatz wäre eine Liste von Sätzen und ein dict von Substantiven auf ihre Reimwörter.
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@__blackjack__
gibt's denn in Python eine Möglichkeit festzustellen, ob etwas ein "gültiges" CSV ist?

Stelle Dir folgendes Szenario vor:
Eine Software importiert "echte" CSV-Dateien, um damit irgendwas auszuwerten. Solche Mechanismen gibt es durchaus, wenn zwei verschiedene Software-Systeme von verschiedenen Herstellern dateibasiert miteinander kommunizieren.

Code: Alles auswählen

a, b, c
d, e, f
g, h, i
Ein Anwender öffnet die Datei und drückt irgendwo auf Return, merkt (natürlich nichts) und importiert die Datei in die Software

Code: Alles auswählen

a, b, c
d, e, 
f
g, h, i
Wie würde man in Python damit umgehen, wenn solche Fehler vorkommen könnten?

(Die obigen Beispieldaten mit den Sprichworten gerne einfach mal ignorieren)

Natürlich ist man immer bestrebt den Faktor "Mensch" an solchen Stellen zu eliminieren, indem man die Daten z.B. direkt per Webservice ex-/importiert. Aber in der Realität geht das leider nicht immer.
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Gar nicht. Es ist ohnehin nicht möglich alle erdenklichen Fehleingaben zu behandeln. Daher sollte man dem Nutzer einfach mitteilen, dass er versucht falsche Daten ins Programm zu stopfen. Ich frag mich ja auch nicht wie ich meinen Dieselmotor dazu bringe auch mit Benzin zu laufen, sondern tanke nur den korrekten Kraftstoff.
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@narpfel
Und mit `" - ` als Trenner macht man sich die in Anführungszeichen gefasste erste Spalte kaputt, womit diese dann mit einem unsinnigen `"` beginnt.
Ich verstehe das Argument. Deswegen schrieb ich oben, dass es eine defekte CSV ist. Im technischen Sinne ist es damit auch auch _keine_ CSV. Da gebe ich Euch Recht.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Und für das Problem Pandas einzusetzen halte ich nicht für "over-engeneered" sondern das ist schlicht das falsche Werkzeug.
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

Danke, @Sparrorw und @EinfachTobi für Eure Anmerkungen.

@narpfel vielen lieben Dank für den Vorschlag :)
Ich würde dafür auch nicht pandas nehmen, weil das tendenziell eher auf Zahlen ausgelegt ist und nicht auf Strings
Das ist eine interessante Info. Denn auch @Sparrows Anmerkung geht in eine ähnliche Richtung. (zumindest interpretiere ich es so)

Leider habe ich die Methoden, die die DataFrames-Klasse für Strings bietet dahingehend interpretiert, dass man damit auch alphanumerische Datenstrukturen verarbeiten kann. (So nach dem Motto: "wenn es zur Verfügung steht, darf man es wohl auch verwenden")

Angenommen - mal abseits vom hier dargestellten Projekt - ich hätte eine saubere tabellenartige Datenstruktur, die in (fast) jeder Spalte auch alphanumerische Zeichen enthielte, wie wäre denn da der alternative Ansatz, um diese Daten zu verarbeiten?

Ich habe versucht, die Frage per google zu beantworten. Leider waren die Treffer diesbezüglich nicht hilfreich.

LG
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Ich würde das davon abhängig machen, was mit den Daten anschließend passieren soll.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Buchfink,
Leider habe ich die Methoden, die die DataFrames-Klasse für Strings bietet dahingehend interpretiert, dass man damit auch alphanumerische Datenstrukturen verarbeiten kann. (So nach dem Motto: "wenn es zur Verfügung steht, darf man es wohl auch verwenden")
Natürlich kann man mit pandas auch textuelle Daten verarbeiten. Es ist nur so dass, die meisten Daten wohl eher numerisch sind. Du wolltest aber ganze Sätze und Phrasen in einem Dataframe speichern. Und während das natürlich geht, ist es doch ungewöhnlich. Pandas ist gut geeignet für tabellarisch, organisierte Daten. Der Datentyp ist dabei gar nicht so ausschlaggebend. So wie eine Excel Tabelle ja auch Text enthalten kann, sind es aber doch oft numerische Werte, Datumsangaben, Zeitangaben usw.

Für ganze Sätze, oder Textpassagen nimmt man dann in der Regel auch etwas anderes als Excel. Die Daten, die du verwalten möchtest, sind sehr lückenhaft, daher würde ich zunächst damit anfangen das zu entfernen, was für deine Zwecke gar nicht gebraucht wird. Vielleicht reicht dann eine einfache Textdatei in der ein Zitat pro Zeile steht.
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@rogerb
ich freue mich sehr, Deine Meinung dazu zu lesen :) Und danke, dass Du das auch nochmal so ausführlich erläutert hast, welche Arten von Daten ich in ein DF laden kann.

Üblicherweise habe ich mit folgender Art von Daten zu tun (für das obige Projekt allerdings völlig irrelevant)

Code: Alles auswählen

FOO, BAR, HAM, SPAM, EGGS
"A", "a",1, 0, 0
"AB", "b",1, 0, 0
"00", "c",1, 1, 0
"B", "a",1, 0, 1
"00", "b",1, 0, 1
Sprich die Daten sind tabellarisch, weitestgehend auch numerisch. Aber hier und da sind alphanumerische Spalten dabei (die sich aber im Gegensatz zu den Sprüchen oben in der Regel klassifizieren lassen)
Oft sind es auch so 100 - 300 Spalten und ca. 5000-10.000 Zeilen.
Ich muss mal ausprobieren, wie gut/performant sowas mit dem DF funktioniert.

Leider hatte ich mich bei diesem Beitrag entschlossen, mein "Experimente" mit den Dataframes in eine ungeeignete Semantik einzubetten. Das ist suboptimal, da es den Nachvollzug meines "eigentlichen" Problems vermutlich eher erschwert als erleichtert. (Sprich ich hab zu viele verschiedene Themen hier miteinander vermischt: Semantik, Projektvorstellung, Architektur-Fragen, Detailfragen zum Debugging.)
Ich gelobe aber Besserung und entschuldige mich für den Aufwand, den ich Euch hier bereitet habe.

Liebe Grüße
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

einen schönen guten Morgen liebe Community,

gestern habe ich nun mein "Projektchen" wieder aufgenommen und ich hoffe und glaube, dass es nun etwas mehr in die Richtung geht, die Ihr erwarten würdet. (Und ich würde mich freuen, von Euch ein wenig Feedback dazu zu erhalten)
Allerdings hat es nun nichts mehr mit der Ausgangsfragestellung dieses Threads zu tun und ich möchte die Threads auch nicht thematisch zu sehr kreuzen.

Daher folgende eher organisatorische Frage vorab:

Wäre es Euch lieber, wenn ich den Code in diesem Thread poste oder soll ich lieber einen neuen Thread im Unterforum "Allgemein" eröffnen und hier her verlinken?

Ich danke Euch schon mal im Voraus!
Antworten