2017-06-28 4 views
0

ich meinen Code:Viele DataFrames in einer Ausgabe, wie zu verschmelzen. Python

def my_def(): 
abc_all=open('file.txt')#where file.txt is a big data with many lines 
lines=abc_all.readlines() 
lines=lines[4:] 

file.txt aussehen (ca. 120 Buchstaben in einer Zeile, und viele Linien:

AAA S S SSDAS ASDJAI A 234 33 43 234 2342999 2.31 22 33.... SSS S D W2UUQ Q231WQ A 222 11 23 123 1231299 2.31 22 11....

for line in lines: 
    abcd=line[5:-34] 
    abcd2 =abcd[:27]+abcd[40:] 
    abc=abcd2.split() 
    result=pd.DataFrame(abc) 

und jetzt möchte ich die Ergebnisse speichern, aber Wenn ich zum Beispiel verwende: result.to_csv() Ich erhalte nur die erste Zeile in meiner Ausgabedatei Ich habe gerade result gedruckt und wie ich sehe, ich empfange jedes l ine wie DataFrame, das ist also der Grund, warum meine Ausgabe nur die erste Zeile druckt. Teil result:

  0  1 2 3  4 5 6 
0 22.2222 -11.1111 222 111 name1 1 l 
     0  1 2 3  4 5 6 
0 33.2222 -11.1111 444 333 name2 1 c 
     0  1 2 3  4 5 6 
0 12.1111 -11.1111 222 111 name3 1 c 

, wie ich diese Ausgabe wie ein Datenrahmen speichern kann, oder wie alle zu einem dieses Datenrahmen zu verschmelzen. Danke für Hilfe!

+1

Es sieht aus wie Sie versuchen, eine Datei Zeile für Zeile zu lesen, und fügen Sie diese Zeilen hinzu (eins nach dem anderen) zu einem Datenrahmen? Sie können dies in einem Schritt tun: 'df = pd.read_csv ('file.txt')'. –

Antwort

0

Was ist mit dem Erstellen einer Liste von Liste zuerst und dann in einen DataFrame verwandeln. Es könnte sein, einfacher und schneller:

results = [] 
for line in lines: 
    abcd = line[5:-34] 
    # if we know all row are the same length one split 
    results.append(abcd.split()) 
df = pd.DataFrame(results) 

Als Einzeiler auch:

df = pd.DataFrame([line[5:-34].split() for line in lines]) 

ex:

b = [ "0 22.2222 -11.1111 222 111 name1 1 l", "0 33.2222 -11.1111 444 333 name2 1 c", "0 12.1111 -11.1111 222 111 name3 1 c"] 
df = pd.DataFrame([line.split() for line in b]) 
print(df) 

    0  1   2 3 4  5 6 7 
0 0 22.2222 -11.1111 222 111 name1 1 l 
1 0 33.2222 -11.1111 444 333 name2 1 c 
2 0 12.1111 -11.1111 222 111 name3 1 c 

Wie @ Andrew L angegeben es könnte zu wenig Interessantes Prüfen Sie, ob die Datei nicht bereits von einem der vielen pandas.read_...

Formate unterstützt wird 10

EDIT: Scheint wie ein Job für pd.read_csv('file.txt', sep=' ') und das Löschen der Spalten, die Sie nicht wollen/die Auswahl der gewünschten

+0

Hallo, ich versuche meinen Code von Anfang an zu ändern und benutze 'df = pd.read_csv ('file.txt')' likeAndrew sagte. Und auch smagnan Methode gibt mir 'None' für alle Zeilen am Ausgang – Pawe

+0

@Pawe Ich weiß nicht, was passieren könnte, habe ich die Tabelle verwendet, die Sie auf Sie Frage gegeben haben. Aber ich weiß nicht, wie Ihre Daten wirklich aussehen (z. B. warum die '[5: -34]'). Ich fügte ein Beispiel ohne den '[5: -34]' für gültigen Text hinzu. Aber ich stelle mir vor, 'read_csv' könnte einfacher sein – smagnan

+0

Ich habe meine Frage bearbeitet, bitte überprüfen Sie es. Ich habe diese Datei mit 'pd.read_csv' geöffnet und ich habe:' df = pd.DataFrame ([Zeile [5: -34] .split() für Zeile in Zeilen]) aber ich habe auch eine Zeile mehr wie: abcd2 = abcd [: 27] + abcd [40:], aber es ist nur für die erste Zeile, wie kann ich es für alle tun? Danke – Pawe

Verwandte Themen