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'"

Bogdan Janiszewski
quelle

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 .

Dan Allan
quelle
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.

Steve
quelle
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
69

df.reset_index(drop=True, inplace=True)

Subhojit Mukherjee
quelle
2
Dies ist eigentlich meine Lieblingslösung, aber keine sehr ausführliche Antwort. Das Handbuch liest dies über das Argument drop: "Versuchen Sie nicht, einen Index in Datenrahmenspalten einzufügen. Dadurch wird der Index auf den Standard-Ganzzahlindex zurückgesetzt." pandas.pydata.org/pandas-docs/stable/generated/…
tommy.carstensen
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)
Natheer Alabsi
quelle
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))
Bhanu Pratap Singh
quelle
3

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

Lord Varis
quelle
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

Yemu
quelle