2016-07-01 12 views
3

Nach der Verwendung von transponieren auf einem Datenrahmen gibt es immer eine zusätzliche Zeile als Rest aus dem ursprünglichen Datenrahmen-Index zum Beispiel entfernen:Wie die zusätzliche Zeile (oder Spalte) nach transponieren() in Pandas

import pandas as pd 

df = pd.DataFrame({'fruit':['apple','banana'],'number':[3,5]}) 
df 
    fruit number 
0 apple  3 
1 banana  5 
df.transpose() 
     0  1 
fruit apple banana 
number  3  5 

Selbst wenn ich habe keinen Index:

df.reset_index(drop = True, inplace = True) 
df 
    fruit number 
0 apple  3 
1 banana  5 

df.transpose() 
     0  1 
fruit apple banana 
number  3  5 

Das Problem ist, dass, wenn ich speichere Sie den Datenrahmen in eine cSV-Datei von:

df.to_csv(f) 

Diese zusätzliche Zeile bleibt oben und ich muss sie jedes Mal manuell entfernen.

Auch funktioniert das nicht:

df.to_csv(f, index = None) 

weil der alte Index nicht mehr ein Index (nur eine weitere Zeile ...) betrachtet.

Es passierte auch, wenn ich umgekehrt umstellte und ich eine zusätzliche Spalte bekam, die ich nicht entfernen konnte.

Irgendwelche Tipps?

+2

'drucken df.T.to_csv (header = None)' oder 'Druck df.to_csv (Index = None)' beide Arbeit für mich . – piRSquared

+0

Oh danke, mir war nicht klar, dass das eigentlich ein Header war. Die Lösung, die in meinem Fall funktionierte, ist "df.T.to_csv (f, header = None)" unter der Annahme, dass df der ursprüngliche Datenrahmen ist (ich möchte die Transponierte). Außerdem verstehe ich nicht, warum du 'print' verwendest. –

+1

Dataframes müssen immer Indizes und Header in Pandas haben. Wenn Sie also keinen liefern, erhalten Sie nur ganze Zahlen. Wenn Sie es transponieren, tauschen Sie einfach die Index- und Header-Dimensionen aus. – Jeff

Antwort

0

Anstatt den zusätzlichen Index zu entfernen, versuchen Sie nicht, den neuen Index festzulegen, den Sie möchten, und verwenden Sie dann Slicing?

Schritt 1: Stellen Sie den neuen Index, den Sie wollen:
df.columns = df.iloc[0]
Schritt 2: Erstellen Sie einen neuen Datenrahmen zusätzliche Zeile zu entfernen.
df_new = df[1:]

1

hatte ich das gleiche Problem, ich löste es durch den Index Reseting vor dem transpose tun. Ich meine df.set_index('fruit').transpose():

import pandas as pd 

df = pd.DataFrame({'fruit':['apple','banana'],'number':[3,5]}) 
df 
    fruit number 
0 apple 3 
1 banana 5 

Und df.set_index('fruit').transpose() gibt:

fruit apple banana 
number 3  5 
Verwandte Themen