Bereiche aus Zeilen zeichenweise mit pandas auslesen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
vanKey
User
Beiträge: 18
Registriert: Mittwoch 31. August 2022, 07:14

Hallo zusammen,

ich muss aus einer Datei file_1.txt von jeder Zeile die Zeichen 6 bis 10 herausschreiben.

Der Inhalt von file_1.txt lautet:

Code: Alles auswählen

  1  -1-10555.37
  3  -1-10 55 37
  4  -1-20555.37
  5  -1-50555.37
  8  -1-80555.37
  9  -1-100 5. 7
Das Ergebnis soll so aussehen:

Code: Alles auswählen

-1-10
-1-10
-1-10
-1-50
-1-80
-1-10
Hat hier jemand eine Idee, mit welchem Paket das am besten geht?

VG
vanKey
Sirius3
User
Beiträge: 18051
Registriert: Sonntag 21. Oktober 2012, 17:20

Da braucht es gar kein Paket, das geht mit den Standardmitteln von Python ohne Schwierigkeiten.
vanKey
User
Beiträge: 18
Registriert: Mittwoch 31. August 2022, 07:14

Ja, ich versuche mit diesen beiden Code-Zeilen auf die entsprechende Indizes zuzugreifen, scheitere aber:

Code: Alles auswählen

bsp = pd.read_csv('file_1.txt', header=None, names=["A"]) 
print(bsp["A"][0:5][6:10])
VG
vanKey
Benutzeravatar
__blackjack__
User
Beiträge: 13533
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@vanKey: Da verwendest Du jetzt Pandas und versuchst eine Datei die keine CSV-Datei ist also solche einzulesen, was nicht geht.

Entweder Du machst das ohne Pandas, mit Python-Bord-Mitteln, oder falls das eine Datei mit festen Spaltenbreiten ist, und 6 bis 10 eigentlich zwei Spalten darstellen, dann gibt es eine Funktion um solche Daten in einen DataFrame einzulesen. Oder es sind zwei Spalten die durch zwei Leerzeichen getrennt sind, dann könnte man das als Trenner angeben und explizit angeben das die zweite Spalte als Text eingelesen werden soll und mit den `Series.str`-Methoden den entsprechenden Teil ausschneiden.

Was bedeuten die Daten denn? Wie viele Spalten sind das eigentlich?

Code: Alles auswählen

- (void)countSheep {
    unsigned int sheep = 0;
    while ( ! [self isAsleep]) { ++sheep; }
}
vanKey
User
Beiträge: 18
Registriert: Mittwoch 31. August 2022, 07:14

Hallo,

es handelt sich hierbei um eine Datei, die keine konstante Anzahl von Spalten hat.
Mal hat eine Zeile 2, mal 3, mal 4 Spalten. Man kann die Datei also nicht sauber einlesen.
D.h. man muss wirklich aus jeder Zeile z.B. den Bereich von der 6. bis zur 10. Zeile auslesen und das dann separat abspeichern.

Der Befehl

Code: Alles auswählen

print(bsp["A"][0][5:10])
liefert sogar -1-10 aber ich kann das nicht für alle Zeilen durchführen.
Grüße
Benutzeravatar
__blackjack__
User
Beiträge: 13533
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@vanKey: Wenn die Datei unregelmässig aufgebaut ist, dann kann man die nicht (direkt) als `DataFrame` einlesen. Und sollte das auch nicht auf biegen und brechen irgendwie versuchen. Da wird ein unpassendes Werkzeug missbraucht, der Code wird komplizierter und schwerer zu verstehen und damit auch fehleranfälliger. Pandas ist nicht die Lösung für alle Probleme. Wenn man einen Hammer hat, sollte man aufpassen nicht jedes Problem als Nagel zu sehen — es gibt auch Schrauben. Klar kann man die auch mit einem Hammer rein kloppen, aber das passende Werkzeug ist der nicht, das wäre ein Schraubendreher.

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    with open("test.txt", encoding="ascii") as lines:
        result = [line[5:10] for line in lines]
    print(result)


if __name__ == "__main__":
    main()
Ausgabe:

Code: Alles auswählen

['-1-10', '-1-10', '-1-20', '-1-50', '-1-80', '-1-10']

Code: Alles auswählen

- (void)countSheep {
    unsigned int sheep = 0;
    while ( ! [self isAsleep]) { ++sheep; }
}
vanKey
User
Beiträge: 18
Registriert: Mittwoch 31. August 2022, 07:14

Ok, top vielen Dank.
Benutzeravatar
snafu
User
Beiträge: 6779
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

vanKey hat geschrieben: Donnerstag 1. September 2022, 08:40 Ok, top vielen Dank.
Es ist schon leicht amüsant, deine Reaktion hier zu sehen, weil die Lösung wirklich einfachstes Standard-Python war. Das zeigt, dass sich heutige Anfänger gerade im Bereich der Datenverarbeitung teilweise nicht mehr wirklich mit Python beschäftigen, sondern nur noch Pandas kennen. Finde ich keine so tolle Entwicklung...
Antworten