2016-01-08 39 views
34

Mam DataFrame pandy z 4 kolumn i chcę stworzyć nowy DataFrame że tylko ma trzy kolumn. To pytanie jest podobne do: Extracting specific columns from a data frame, ale w przypadku pand nie R. Poniższy kod nie działa, powoduje zgłoszenie błędu i na pewno nie jest to pandasnicowy sposób.pandy: Wyciąganie konkretne wybrane kolumny z DataFrame do nowego DataFrame

import pandas as pd 
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]}) 
new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator 

Jaki jest pandasnicowy sposób na zrobienie tego?

Odpowiedz

64

Jest na to sposób to zrobić i faktycznie wygląda podobnie do R

new = old[['A', 'C', 'D']].copy() 

Tutaj jesteś po prostu wybierając kolumny, które chcesz z oryginalnej ramki danych i stworzenie dla tych zmiennych. Jeśli chcesz zmodyfikować nową ramkę danych, prawdopodobnie będziesz chciał użyć .copy(), aby uniknąć SettingWithCopyWarning.

Alternatywną metodą jest użycie filter która stworzy kopię domyślnie:

new = old.filter(['A','B','D'], axis=1) 

Wreszcie, w zależności od liczby kolumn w oryginalnym dataframe, to może być bardziej zwięzły, aby wyrazić to za pomocą drop (spowoduje to również utworzenie kopii domyślnie):

new = old.drop('B', axis=1)