2016-11-18 3 views
2

zu unterteilen Ich habe einen Pandas Datenrahmen, der 50 Spalten hat und ich möchte 30 Spalten wählen. Lassen Sie uns sagen, dass wir die folgenden Datenrahmen haben:Wie ein Pandas Dataframe

df = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",............, "z"] 

Ich möchte wählen „a“ und „c“ und dann alle Spalten von „h“ bis „z“

beraten Sie, wie man Unterteilen Sie diesen Datenrahmen entweder nach Name oder nach Index.

würde Ich mag die resultierende Datenrahmen wie die aussehen folgende:

df = ["a", "c", "h", "i", "j", "k", "l",............, "z"] 

Antwort

1

Sie numpy.r_ für concanecate Positionen von Spalten verwenden können, dann iloc verwenden zur Auswahl:

print (df.iloc[:, np.r_[0,2,7: len(df.columns)]]) 

Probe:

df = pd.DataFrame({'a':[1,2,3], 
        'b':[4,5,6], 
        'c':[7,8,9], 
        'd':[1,3,5], 
        'e':[5,3,6], 
        'f':[7,8,9], 
        'g':[1,3,5], 
        'h':[5,3,6], 
        'i':[7,8,9], 
        'j':[1,3,5], 
        'k':[5,3,6], 
        'l':[7,4,3], 
        'm':[7,4,3]}) 

print (df) 
    a b c d e f g h i j k l m 
0 1 4 7 1 5 7 1 5 7 1 5 7 7 
1 2 5 8 3 3 8 3 3 8 3 3 4 4 
2 3 6 9 5 6 9 5 6 9 5 6 3 3 

print (np.r_[0,2,7: len(df.columns)]) 
[ 0 2 7 8 9 10 11 12] 

print (df.iloc[:, np.r_[0,2,7: len(df.columns)]]) 
    a c h i j k l m 
0 1 7 5 7 1 5 7 7 
1 2 8 3 8 3 3 4 4 
2 3 9 6 9 5 6 3 3 

Eine andere Lösung ist die Verwendung exclude list mit difference:

exclude = ['b','d','e','f','g'] 
cols = df.columns.difference(exclude) 
print (cols) 
Index(['a', 'c', 'h', 'i', 'j', 'k', 'l', 'm'], dtype='object') 

print (df[cols]) 
    a c h i j k l m 
0 1 7 5 7 1 5 7 7 
1 2 8 3 8 3 3 4 4 
2 3 9 6 9 5 6 3 3 

Oder drop Spalten:

exclude = ['b','d','e','f','g'] 
print (df.drop(exclude, axis=1)) 
    a c h i j k l m 
0 1 7 5 7 1 5 7 7 
1 2 8 3 8 3 3 4 4 
2 3 9 6 9 5 6 3 3 
1

nur ein zusätzlicher Vorschlag mit Namen:
df=df.loc[:, ['a','c']].join(df.loc[:, 'h':'z'])