Seite 1 von 1

Bereiche aus Zeilen zeichenweise mit pandas auslesen

Verfasst: Mittwoch 31. August 2022, 09:30
von vanKey
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

Re: Bereiche aus Zeilen zeichenweise mit pandas auslesen

Verfasst: Mittwoch 31. August 2022, 09:32
von Sirius3
Da braucht es gar kein Paket, das geht mit den Standardmitteln von Python ohne Schwierigkeiten.

Re: Bereiche aus Zeilen zeichenweise mit pandas auslesen

Verfasst: Mittwoch 31. August 2022, 09:51
von vanKey
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

Re: Bereiche aus Zeilen zeichenweise mit pandas auslesen

Verfasst: Mittwoch 31. August 2022, 10:55
von __blackjack__
@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?

Re: Bereiche aus Zeilen zeichenweise mit pandas auslesen

Verfasst: Mittwoch 31. August 2022, 11:42
von vanKey
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

Re: Bereiche aus Zeilen zeichenweise mit pandas auslesen

Verfasst: Mittwoch 31. August 2022, 12:11
von __blackjack__
@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']

Re: Bereiche aus Zeilen zeichenweise mit pandas auslesen

Verfasst: Donnerstag 1. September 2022, 08:40
von vanKey
Ok, top vielen Dank.

Re: Bereiche aus Zeilen zeichenweise mit pandas auslesen

Verfasst: Freitag 2. September 2022, 05:51
von snafu
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...