2015-01-20 7 views
25

czytam moje daneJak usunąć kolumnę z ramki danych za pomocą pand?

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

a otrzymasz:

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

Jak usunąć kolumnę z powyższej ramki danych id ?. Próbowałem następujące:

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

Ale to podnosi ten wyjątek:

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

Co oznacza raport "df.columns" jako nazwy kolumn? Być może w nazwie kolumny jest spacja? – unutbu

+0

'Index ([u'id opinion '], dtype =' object ')' Dzięki za odpowiedź – newWithPython

+1

Jedna rzecz do zapamiętania, czy naprawdę musisz usunąć kolumnę? Możesz wybrać tylko kolumny będące przedmiotem zainteresowania z pliku df, wykonując 'df ['text']' lub bardziej ogólnie 'df [some_list]', dodatkowo jeśli nigdy nie chciałeś tego na początku, nie ładuj go 'df = pd.read_csv ('/ path/file.tsv', header = 0, delimiter = '\ t', usecols = [0]) ' – EdChum

Odpowiedz

5

Aby faktycznie usunąć kolumnę

del df['id'] lub df.drop('id', 1) powinien działał jeśli minął kolumna odpowiada dokładnie

Jednakże, jeśli nie ma potrzeby, aby usunąć columnthen można po prostu wybrać kolumnę zainteresowanie tak:

In [54]: 

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

Jeśli nigdy nie chciał go w pierwszej kolejności, a następnie przekazać listę przełęcze do read_csv jako 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 

chodzi swój błąd to dlatego 'id' nie jest w kolumnach lub że jest to napisane w różny sposób lub ma spacji. Aby sprawdzić to spojrzenie na dane wyjściowe z print(df.columns.tolist()), wyświetli ono listę kolumn i pokaże, czy masz spacje wiodące/końcowe.

+0

Obdarzona opieka wyjaśnić? – EdChum

+8

Pytanie brzmiało, jak usunąć kolumnę. Jest to ważne pytanie, które nie zostało uwzględnione w tej odpowiedzi. Nie byłem spadkobiercą. –

+1

@DimD kontekstem pytania jest to, że OP chciał usunąć kolumnę, która nie była zainteresowana, moja odpowiedź pokazuje, że po pierwsze nie jest to konieczne, jeśli chcesz tylko użyć konkretnej kolumny lub w rzeczywistości nie możesz przeczytać w tej kolumnie lub tylko czytać kolumny zainteresowania, a PO przyjął odpowiedź: – EdChum

51

df.drop(colname, axis=1) (lub del df[colname]) jest właściwa metoda, aby usunąć kolumnę.

Jeśli podniesiono wartość ValueError, oznacza to, że nazwa kolumny nie jest dokładnie taka, jak myślisz.

Sprawdź, czy Pandy uważają, że są to nazwy kolumn.

26

Najlepszym sposobem, aby usunąć kolumnę w pand jest użycie drop:

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

gdzie 1 jest numer (0 dla wierszy i 1 dla kolumn).

Aby usunąć kolumna bez konieczności ponownego przypisywania df możesz zrobić:

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

Na koniec, aby upuścić kolumnę numer zamiast przez kolumnę etykieta, spróbuj tego, aby usunąć, np.1., 2. i 4. kolumny:

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


Wyjątki:

Jeżeli niewłaściwy numer kolumny lub etykieta jest wymagany błąd zostanie wyrzucony. Aby sprawdzić liczbę kolumn, użyj df.shape[1] lub len(df.columns.values), a aby sprawdzić etykiety kolumn, użyj df.columns.values.

Wyjątek zostanie podniesiony odpowiedź została oparta na @ LondonRob's answer i pozostawiono tutaj, aby pomóc przyszłym odwiedzającym tę stronę.