2016-05-04 5 views
0

Ich habe das Datum in Textdatei:Python Pandas: Wie gruppierte Daten durch Kopfzeilen getrennt gelesen werden?

AL012015,    Kevin,  20, 
20151108, 1800, , XY, 22.2A, 71.5B, 30, 10, 
20151108, 1800, , XY, 22.2A, 71.5B, 30, 10, 
20151108, 1800, , ZZ, 22.2A, 71.5B, 30, 10, 
AL022015,    Mike,  20, 
20151108, 1800, , XX, 22.2A, 71.5B, 30, 10, 
20151108, 1800, , YY, 22.2A, 71.5B, 30, 10, 

Ich möchte jeden Brocken unter AL012015 lesen, wie folgt:

d['01']: 
20151108, 1800, , XY, 22.2A, 71.5B, 30, 10, 
20151108, 1800, , XY, 22.2A, 71.5B, 30, 10, 
20151108, 1800, , ZZ, 22.2A, 71.5B, 30, 10, 
d['02']: 
20151108, 1800, , XX, 22.2A, 71.5B, 30, 10, 
20151108, 1800, , YY, 22.2A, 71.5B, 30, 10, 

zur Kenntnis, dass 01 und 02 sind die beiden Ziffern nach AL

+0

Danke MaxU zum Bearbeiten meiner Frage. Ich bin neu bei Stackoverflow und nicht ganz sicher, wie ich Fragen stellen soll, wie du meine bearbeitet hast. – Storm

+0

Haben Sie etwas versucht? Vielleicht möchten Sie etwas wie folgt lesen: https://python4astronomers.github.io/files/asciifiles.html –

+0

Hallo @Storm. Brauchen Sie eine Lösung, die ausschließlich auf 'Pandas' basiert? –

Antwort

1

Ich denke, dass Sie eine Vorverarbeitung anwenden können. awk Mit einer neuen Datei mit den Ziffern in einer zusätzlichen Spalte wie folgt zu erhalten:

$ awk -F, '/^AL/ {AL=substr($1,3,2);next}{print AL","$0}' file.txt 
01,20151108, 1800, , XY, 22.2A, 71.5B, 30, 10, 
01,20151108, 1800, , XY, 22.2A, 71.5B, 30, 10, 
01,20151108, 1800, , ZZ, 22.2A, 71.5B, 30, 10, 
02,20151108, 1800, , XX, 22.2A, 71.5B, 30, 10, 
02,20151108, 1800, , YY, 22.2A, 71.5B, 30, 10, 

Dann können Sie pandas wohler mit einem groupby Betrieb verwenden. Nehmen wir an, dass die vorherige Ausgabe auf file2.txt ist, was Sie tun können:

import pandas as pd 
df = pd.read_csv("file2.txt",sep=",",header=None) 
for gr,data in df.groupby(0):print(gr,"\n",data) 
1 
    0   1  2 3 4  5  6 7 8 9 
0 1 20151108 1800  XY 22.2A 71.5B 30 10 NaN 
1 1 20151108 1800  XY 22.2A 71.5B 30 10 NaN 
2 1 20151108 1800  ZZ 22.2A 71.5B 30 10 NaN 
2 
    0   1  2 3 4  5  6 7 8 9 
3 2 20151108 1800  XX 22.2A 71.5B 30 10 NaN 
4 2 20151108 1800  YY 22.2A 71.5B 30 10 NaN 

Ich hoffe, das Ihnen helfen kann.

Grüße.

+0

schöne und schnelle Lösung! – MaxU

+0

Fantastische Lösung! Danke vielmals! Würden Sie bitte eine einfache Erklärung des obigen awk-Befehls geben? – Storm

+0

Sicher. Wenn die Zeile mit AL (/^AL /) beginnt, speichern Sie den Teilstring in der AL-Variablen und gehen Sie zur nächsten Zeile (AL = substr ($ 1,3,2); nächstes) sonst drucken Sie die vorherige Variable neben der Zeile (AL drucken "," $ 0) –

Verwandte Themen