2016-11-18 100 views
2

我有一个拥有50列的熊猫数据框,我想选择30列。 比方说,我们有以下数据框:如何子集熊猫数据框

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

我想选择从“H”,“A”和“C”,然后所有列,直到“Z”

请告知如何通过名称或索引子集这个数据框。

我希望得到的数据框,看起来像以下:

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

回答

1

可以使用numpy.r_为列concanecate位置,然后用iloc选择:

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

样品:

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 

另一种解决方案是使用exclude listdifference

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 

或者drop列:

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

只是一个额外的建议用名:
df=df.loc[:, ['a','c']].join(df.loc[:, 'h':'z'])