Entfernen der Indexspalte in Pandas beim Lesen einer CSV


127

Ich habe den folgenden Code, der eine CSV-Datei importiert. Es gibt 3 Spalten und ich möchte die ersten beiden auf Variablen setzen. Wenn ich die zweite Spalte auf die Variable "Effizienz" setze, wird auch die Indexspalte angeheftet. Wie kann ich die Indexspalte entfernen?

df = pd.DataFrame.from_csv('Efficiency_Data.csv', header=0, parse_dates=False)
energy = df.index
efficiency = df.Efficiency
print efficiency

Ich habe es versucht

del df['index']

nachdem ich eingestellt habe

energy = df.index

was ich in einem anderen Beitrag gefunden habe, aber das führt zu "KeyError: 'index'"

Antworten:


69

DataFrames und Serien haben immer einen Index. Obwohl es neben den Spalten angezeigt wird, handelt es sich nicht um eine Spalte, weshalb del df['index']dies nicht funktioniert hat.

Wenn Sie den Index durch einfache fortlaufende Nummern ersetzen möchten, verwenden Sie df.reset_index().

Um ein Gefühl dafür zu bekommen, warum der Index vorhanden ist und wie er verwendet wird, lesen Sie z. B. 10 Minuten zu Pandas .


1
Vielen Dank! Ich habe beschlossen, es einfach anders zu importieren, ohne Pandas zu verwenden. Ich muss für jede der Spalten eine Arithmetik durchführen, und Python mochte es nicht, wenn die Indexspalte angehängt wurde. Pandas ist sicherlich der einfachste Weg, Daten zu importieren, aber nicht immer der beste, den ich herausgefunden habe.
Bogdan Janiszewski

2
Haben Sie versucht, mit Pandas zu rechnen?
Jamie Bull

1
Kann man den Indexnamen entfernen?
Quant

3
Ja index.name = None.
Dan Allan

1
@ BogdanJaniszewski, wenn du keine Pandas benutzt hast, warum hast du das dann als Antwort akzeptiert?
Multigoodverse

248

Geben Sie beim Lesen in und aus Ihrer CSV-Datei das folgende Argument index=Falsean:

 df.to_csv(filename, index=False)

und aus dem csv zu lesen

df.read_csv(filename, index=False)  

Dies sollte das Problem verhindern, sodass Sie es später nicht beheben müssen.


8
Vielen Dank. Genau das ist es, wonach die Frage sucht.
Hellblauer Punkt

1
"header = False" funktioniert zum Entfernen von Headern auf die gleiche Weise
J.Dahlgren

29
sollte sein index_col=False.
Vedda

1
Die Verwendung df.to_sql("table",cursor,if_exists="append",index=False)behebt auch den SQLite-Fehlersqlite3.OperationalError: table message has no column named index
Anna

1
@vedda es scheint index=Falsefür to_excel()und index_col=Falsemit read_csv()in pandas 0.23.4 zu sein. : - /
Matt Wilkie


12

Sie können eine der Spalten als Index festlegen, falls es sich beispielsweise um eine "ID" handelt. In diesem Fall wird die Indexspalte durch eine der von Ihnen ausgewählten Spalten ersetzt.

df.set_index('id', inplace=True)

3

Wenn Ihr Problem dasselbe ist wie meins, bei dem Sie nur die Spaltenüberschriften von 0 auf die Spaltengröße zurücksetzen möchten. Machen

df = pd.DataFrame(df.values);

BEARBEITEN:

Keine gute Idee, wenn Sie heterogene Datentypen haben. Besser einfach benutzen

df.columns = range(len(df.columns))

3

Eine Sache, die ich mache, ist df=df.reset_index() danndf=df.drop(['index'],axis=1)


Fehler: "Labels ['Index'] nicht in Achse enthalten"
Vasin Yuriy

2

Sie können angeben, welche Spalte ein Index in Ihrer CSV-Datei ist, indem Sie den Parameter index_col der Funktion from_csv verwenden. Wenn dies Ihr Problem nicht löst, geben Sie bitte ein Beispiel für Ihre Daten an

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.