2017-03-03 7 views
2

Ich habe einen Datensatz mit '^ A' als Spaltenbegrenzer und '^ B' als Zeilenbegrenzer. Momentan, wenn ich versuche, dies einzulesen, wird alles als neuer Spaltenkopf eingelesen, weil Pandas nicht erkennt, dass es ein Ende der ersten Zeile gibt. Ich benutze nur eine einfache pandas read_csv-Anweisung. Hier ist es;Auswählen eines Linienbegrenzers in Pandas

data = pd.read_csv('data.dat', sep='^A', engine='python') 

Könnte dies etwas sein, mit der Tatsache zu tun, dass es eine .dat Datei ist?

Ich kann keine Literatur online finden, die darüber spricht, wie Pandas mit Zeilenbegrenzern umgehen können ....... das scheint seltsam. die ‚^ B‘ zu Zeilenendmarke

+2

Ich glaube nicht, diese unterstützt wird, dann würden Sie unsere Datei zuerst und es Vorprozess analysieren müssen und ändern, so dass es kompatibel ist – EdChum

+2

Könnte es sein, dass es nur Ihr Editor, der '^ A' und'^B' als Ersatzzeichen für einige Binärwerte anzeigt, die nicht angezeigt werden können? – languitar

+0

@languitar Dies ist möglich, aber ich weiß immer noch nicht, welche Trennzeichen ich verwenden soll. – Taylrl

Antwort

0
df = pd.read_csv(StringIO("""h1^Ah2^Ah3^B111^A222^A333^B111^A222^A333^B111^A222^A333"""), 
      sep='\^B',engine='python', header=None) 

df = df.stack().to_frame() 

df 
Out[52]: 
       0 
0 0  h1^Ah2^Ah3 
    1 111^A222^A333 
    2 111^A222^A333 
    3 111^A222^A333 

df = df[0].str.split('\^A', expand=True) 

df 
Out[54]: 
     0 1 2 
0 0 h1 h2 h3 
    1 111 222 333 
    2 111 222 333 
    3 111 222 333 

df.columns = df.iloc[0].tolist() 

df 
Out[69]: 
     h1 h2 h3 
0 0 h1 h2 h3 
    1 111 222 333 
    2 111 222 333 
    3 111 222 333 

df = df[1:] 

df 
Out[71]: 
     h1 h2 h3 
0 1 111 222 333 
    2 111 222 333 
    3 111 222 333 
Verwandte Themen