2017-04-10 2 views
0

Ich versuche, eine .DAT-Datei zu importieren, die von meinen Experimenten als Metadaten in den Kopfzeilen und dann die Daten des Experiments selbst ausgegeben wird (nach der Linie mit Strichlinien). Meine Idee war, es zu strippen, so dass ich eine Liste der Zeichenfolgenvariable habe, die die Metadaten und eine andere Variable als einen Datenrahmen mit den Ergebnissen enthält (der Teil unter den Bindestrichen). Ich habe Probleme, die Daten unten als Datenrahmen zu importieren, da die obigen Metadaten als eine Liste von Zeichenfolgen klassifiziert sind und daher die ganze Datei in diesem Format bleibt. Gibt es eine Möglichkeit, die Daten als Datenrahmen und nicht als Liste von Strings zu erhalten?Importieren einer DAT-Datei in einen Datenrahmen anstelle einer Liste von Strings in Python

Learned-Helplesness-Experiment (TriplePlatform) from  05.04.2017   13:41:24 

software version: DoublePlatform_1.3 04-Jun-2014 

Setup of Experiment:  

Platform 1: 
ExpType: M M M M M M M M M M 

heated side: right right right right right right right  right right right 

PIs:  n. def.  0 0 0 0 0 0 0 0 0 

Platform 2: 
ExpType: Te Te Te Y Te Y Y Y Y Y 

heated side: right right right ->M right ->M ->M ->M ->M ->M 

PIs:  n. def.  0 0 0 0 0 0 0 0 0 

Platform 3: 
ExpType: Y Y Y Y M_S Y Y Y Y Y 

heated side: ->M ->M ->M ->M right ->M ->M ->M ->M ->M 

PIs:  n. def.  0 0 0 0 0 0 0 0 0 


------------------------------------ ------------------------------------ 

0 0 0 0 0 
1 47 -0.3759766 0.1123047 0.3710938 
2 97 0.01953125 -0.1318359 0.1123047 
3 157 -0.4150391 0.2246094 0.3369141 
4 207 -0.01953125 -0.2539063 0.1318359 
5 257 -0.3515625 0.3027344 0.3222656 

Antwort

1

Ich vermute, Sie verwenden Pandas? Ich denke, es gibt keinen "allgemeinen" Weg, dies zu tun. Sie können die Datei manuell öffnen/analysieren (bis zu den "gestrichelten Linien"). Der Teil bis zur Strichlinie behalten Sie als "Liste der Strings" bei. Dann sagen Sie Pandas, den Rest zu importieren, beginnend mit der Zeilennummer x (wo Sie die Bindestriche gefunden haben). Die Option heißt skiprows.

Edit1 (als Antwort auf den Kommentar):

, der davon abhängt, ob die Header eine konstante Anzahl von Zeilen. Wenn nicht, können Sie durch die Datei Zeile für Zeile lesen, für die Striche suchen:

with open('filename', 'r') as file: 
    line_no = 0 
    for line in file.read(): 
     line_no += 1 
     if line.startswith('-'*37): 
      # do sth 
      break 
     else: 
      # do sth 

EDIT2

Um den Datenteil zu importieren, können Sie

verwenden
pandas.read_csv(..., sep='\t', skiprows=line_no) 

falls tab das Feldtrennzeichen ist, oder

pandas.read_csv(..., delim_whitespace=True, skiprows=line_no) 

wenn die Felder begrenzt sind durch eine (oder mehrere) blanks

+0

Wenn ich etwas wie folgt verwendet werden: f = open (Dateinamen, 'r') = fly_data f.readlines() [36:]; f.close() wird immer noch als eine Liste von Strings gelesen. Ich habe es mit mehreren numpy Funktionen und Pandas Funktionen versucht. Aber ich habe niemanden gefunden, der so weit funktioniert. Ich fange gerade mit python an, deshalb erwartete ich irgendjemanden, der eine Funktion kennt, die für diesen – chiser

+0

funktioniert, was das Trennzeichen des Datenteils ist? Ist es "tab" oder "blank"? –

+0

Es ist durch Leerzeichen begrenzt, somit funktionierte das letzte gut. Danke, Mann! Ich habe immer noch nicht den Code in Edit1 versucht, ich denke, ich muss etwas wie file.readlines() [linien_no] nach der if-Bedingung schreiben und dann sollte es funktionieren. Ich muss mich noch mit der Python-Nomenklatur vertraut machen :) – chiser

Verwandte Themen