2015-01-20 26 views
25

ich meine DatenWie lösche ich eine Spalte aus einem Datenrahmen mit Pandas?

import pandas as pd 
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t') 
print df 

lesen und erhalten:

  id text 
0 361.273 text1... 
1 374.350 text2... 
2 374.350 text3... 

Wie kann ich die id Spalte aus dem obigen Datenrahmen löschen ?. Ich habe versucht, die folgenden:

import pandas as pd 
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t') 
print df.drop('id', 1) 

Aber es stellt sich diese Ausnahme:

ValueError: labels ['id'] not contained in axis 
+2

Was gibt 'df.columns' als Spaltennamen an? Vielleicht gibt es ein Leerzeichen im Spaltennamen? – unutbu

+0

'Index ([u'id Meinung '], dtype =' Objekt ')' Danke für die Antwort – newWithPython

+1

Eine Sache zu beachten, müssen Sie wirklich die Spalte löschen? Sie können nur die Spalten von Interesse aus dem df auswählen, indem Sie 'df ['text']' oder allgemeiner 'df [some_list]', zusätzlich, wenn Sie es nie an erster Stelle wollten, laden Sie es nicht 'df = pd.read_csv ('/ pfad/file.tsv', header = 0, delimiter = '\ t', usecols = [0]) ' – EdChum

Antwort

5

löschen tatsächlich die Spalte

del df['id'] oder df.drop('id', 1) sollte, wenn die übergebene Spalte genau jedoch

Spiele gearbeitet haben, wenn Sie einfach in die Spalte auswählen können nicht die columnthen löschen müssen Interesse wie folgt:

In [54]: 

df['text'] 
Out[54]: 
0 text1 
1 text2 
2 textn 
Name: text, dtype: object 

Wenn Sie es noch nie in erster Linie wollte dann übergeben Sie eine Liste von cols zu read_csv als param usecols:

In [53]: 
import io 
temp="""id text 
363.327 text1 
366.356 text2 
37782 textn""" 
df = pd.read_csv(io.StringIO(temp), delimiter='\s+', usecols=['text']) 
df 
Out[53]: 
    text 
0 text1 
1 text2 
2 textn 

In Bezug auf Ihre Fehler es ist, weil 'id' nicht in Ihre Spalten ist oder dass es anders geschrieben oder Leerzeichen hat. Um diesen Blick auf die Ausgabe von print(df.columns.tolist()) zu überprüfen, wird eine Liste der Spalten ausgegeben und angezeigt, ob Sie führende/nachgestellte Leerzeichen haben.

+0

Downvoter Pflege zu erklären? – EdChum

+8

Die Frage war, wie man eine Spalte löscht. Es ist eine gültige Frage, die in dieser Antwort nicht behandelt wird. Ich war nicht der Downvoter. –

+1

@TimD der Kontext der Frage ist, dass OP eine Spalte entfernen wollte, die sie nicht interessiert, meine Antwort zeigt, dass dies erstens nicht notwendig ist, wenn Sie nur eine bestimmte Spalte verwenden möchten oder dass Sie tatsächlich einfach nicht lesen konnten diese Spalte oder nur lesen Sie die Spalten von Interesse und das OP akzeptiert die Antwort – EdChum

51

df.drop(colname, axis=1) (oder del df[colname]) ist die richtige Methode zu verwenden, um eine Spalte zu löschen.

Wenn ein ValueError ausgelöst wird, bedeutet dies, dass der Spaltenname nicht genau das ist, was Sie denken, dass es ist.

Überprüfen Sie df.columns, um zu sehen, was Pandas denkt, sind die Namen der Spalten.

26

Der beste Weg, um eine Spalte in Pandas löschen verwenden drop:

df = df.drop('column_name', axis=1) 

wo 1 die Achse Nummer (0 für Zeilen und 1 für Spalten.)

des Löschen Spalte ohne Neuzuweisung df können Sie tun:

df.drop('column_name', axis=1, inplace=True) 

Schließlich, um nach Spalte Nummer anstelle von Spalte Label, versuchen Sie dies zu löschen, z.die 1., 2. und 4. Spalte:

df.drop(df.columns[[0, 1, 3]], axis=1) # df.columns is zero-based pd.Index 


Ausnahmen:

Wird eine falsche Spaltennummer oder Label einen Fehler angefordert wird, wird geworfen. Um die Anzahl der Spalten zu überprüfen, verwenden Sie df.shape[1] oder len(df.columns.values) und überprüfen Sie die Spaltenbeschriftungen mit df.columns.values.

Eine Ausnahme würde ausgelöst Antwort wurde basierend auf @ LondonRobs answer und verließ hier, um zukünftige Besucher dieser Seite zu helfen.

Verwandte Themen