2016-01-08 5 views
34

Ich habe einen Pandas Datenrahmen mit 4 Spalten und ich mag einen neues Datenrahmen zu schaffen, die nur drei der Spalten. Diese Frage ist ähnlich zu: Extracting specific columns from a data frame aber für Pandas nicht R. Der folgende Code funktioniert nicht, löst einen Fehler aus, und ist sicherlich nicht der Pandasnic Weg, es zu tun.Pandas: Extrahieren von bestimmten ausgewählten Spalten aus einem Datenrahmen, um neuen Datenrahmen

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 

Was ist der Pandasnic Weg, es zu tun?

Antwort

64

Es gibt einen Weg, dies zu tun und es sieht tatsächlich ähnlich wie R

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

Hier werden Sie die Auswahl nur die Spalten, die Sie aus dem ursprünglichen Datenrahmen wollen und eine Variable für diejenigen zu schaffen. Wenn Sie den neuen Datenrahmen überhaupt ändern wollen, sollten Sie wahrscheinlich .copy() verwenden, um eine SettingWithCopyWarning zu vermeiden.

Eine alternative Methode ist filter zu verwenden, die eine Kopie von Standard schaffen:

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

Schließlich abhängig von der Anzahl der Spalten in Ihrem ursprünglichen Datenrahmen, könnte es prägnanter sein dies ein drop mit auszudrücken (Dies wird auch standardmäßig eine Kopie erstellen):

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