Daten von CSV Files

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
smiddy
User
Beiträge: 1
Registriert: Freitag 26. März 2021, 10:25

Hallo zusammen,

ich lese Daten aus n CSV Files ein, concatiere diese und pivotiere diese anschließend.
Wie kann ich erreichen, das nur die Datensätze angezeigt werde, in denen das Feld Parameter ein Unterschied zeigt?

In meinem Beispiel sollte nur die Parameter DSM und Delimitor ausgegeben werden, da diese unterschiedliche sind.

Hier mein bisheriger Code:

import os, glob
import pandas as pd
path = "//Users/dietmar/Desktop/Python/Verzeichnis/"
all_files = glob.glob(os.path.join(path, "*.csv"))
all_df = []
for f in all_files:
df = pd.read_csv(f, sep=';')
df['file'] = f.split('/')[-1]
all_df.append(df)
merged_df = pd.concat(all_df, ignore_index=True, sort=True)
print(merged_df.pivot(index='Parameter',columns='file'))

Ausgabe:
file INTE.csv PROD.csv TEST.csv
Parameter
DSM 3.00 2.90 3.10
Delimitor ; NaN .
Wert1 Test Test Test

Vielen Dank für Eure Anregungen!
Benutzeravatar
__blackjack__
User
Beiträge: 14055
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@smiddy: Pfade zerlegt man nicht mit Zeichenkettenoperationen. In neuem Code würde man eher `pathlib` als `os.path`-Funktionen verwenden.

Man müsste nach dem Laden alle Spalten rauswerfen die nur einen Wert in allen Zeilen haben und nicht den Namen "file" haben.

Ungetestet:

Code: Alles auswählen

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

import pandas as pd


def main():
    base_path = Path("//Users/dietmar/Desktop/Python/Verzeichnis")

    data = pd.concat(
        [
            pd.read_csv(file_path, sep=";").assign(file=file_path.name)
            for file_path in base_path.glob("*.csv")
        ],
        ignore_index=True,
        sort=True,
    )
    data = data.drop(
        columns=data.columns[(data.nunique() == 1) & (data.columns != "file")]
    )
    print(data.pivot(index="Parameter", columns="file"))


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