Probleme mit der Erstellung eines Data Frame

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
7sigma
User
Beiträge: 1
Registriert: Freitag 10. April 2020, 19:02

Guten Abend liebe Python-Community!

Ich habe viele txt-Files, die nur eine Spalte enthalten und ich möchte diesen Datensatz in einen DataFrame umwandeln.
Problem ist, dass alle Files bei mir immer nur in eine Spalte nacheinander gespeichert werden. Ich möchte aber, dass jede File eine separate Spalte bildet. Und ich kriege das nicht hin.

Code: Alles auswählen

path =r'pfad/ordner/*.txt'

allFiles = glob.glob(os.path.join(path, "*.txt"))
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
       df = pd.read_csv(file_,index_col=None, header=None, sep='\t')
       list_.append(df)
frame = pd.concat(list_, ignore_index=True)


Ich verstehe nicht, was ich falsch mache... Ich wüde sehr für jeden Tipp dankbar sein!
Liebe Grüße
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@7sigma: An welcher Stelle macht das denn nicht mehr das was Du erwartest? Erwartest Du beispielsweise das `allFiles` etwas enthält? Ich eher nicht weil Du da ein „glob“ auf den Pfad "pfad/ordner/*.txt/*.txt" machst, was falsch aussieht, oder?

Eingerückt wird vier Leerzeichen pro Ebene, nicht sieben.

`os.path` & Co würde man in neuem Code durch `pathlib.Path` ersetzen.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `all_files` statt `allFiles`.

Inhaltlich ist der Name auch falsch, denn in der Liste sind keine Dateiobjekte sondern Datei*namen*. Von einem Dateiobjekt erwartet der Leser das es so Methoden wie zum Beispiel `read()`/`write()` und `close()` besitzt.

Die erste Zuweisung an `frame` ist sinnlos weil der Wert nirgends verwendet wird.

`list_` ist kein guter Name. Eine Name sollte dem Leser verraten was der Wert dahinter im Kontext des Programms bedeutet. Man sollte Code *lesen* können. Stell Dir vor Du liest den Code jemandem vor und fragst den hinterher ob er verstanden hat was da inhaltlich passiert.

Hier würde sich auch eine „list comprehension“ anbieten.

Was soll das `_` am Ende von `file_`?

Du willst die Dataframes auch nicht unter- sondern nebeneinander haben.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
from pathlib import Path

import pandas as pd


def main():
    text_file_directory = Path("pfad", "ordner")

    single_column_dataframes = [
        pd.read_csv(filename, index_col=None, header=None, sep="\t")
        for filename in text_file_directory.glob("*.txt")
    ]
    dataframe = pd.concat(single_column_dataframes, axis=1, ignore_index=True)
    print(dataframe)


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten