2016-05-27 5 views
1

У меня возникает основная проблема при использовании Pandas Python. Например, мой Dataframe «a» имеет следующие столбцы q, w, e, r. Теперь я хочу взять подмножество a.Индексирование и выбор только найденных столбцов в Pandas python

b=a[[w,e,r,z]] 

но это не будет создавать подмножество, так как г не существует в, Пожалуйста, помогите, как я могу позаботиться об этой проблеме, несмотря на не найдя г в «» dataframe, я хочу «Ъ» которые будут созданы с остальными из них w, e, r.

ответ

1

Это что использованиеметод не самый эффективный способ сделать это:

% timeit a[a.columns[a.columns.isin(['w', 'e', 'r', 'z'])]] 
out : 1000 loops, best of 3: 528 µs per loop 

Когда вы просто использовать фильтр:

%timeit a[[col for col in ['w','e','r','z'] if col in a.columns]] 
out: 1000 loops, best of 3: 431 µs per loop 

С другой стороны, используя isin автоматически индексировать столбцы, как создание бы dataframe :

a = pd.DataFrame({'q':[1],'w':[2],'e':[3],'r':[4]})  
out: e q r w 
    0 3 1 4 2 

a[a.columns[a.columns.isin(['w', 'e', 'r', 'z'])]] 
out : e r w 
    0 3 4 2 

a[[col for col in ['w','e','r','z'] if col in a.columns]] 
out: w e r 
    0 2 3 4 
0

можно сделать вручную фильтрации перед индексированием:

filtered_col = [col for col in [w,e,r,z] if col in a.columns] 
b = a[filtered_col] 
+1

Я думаю, что вы, возможно, допустили ошибку. Возможно, вы захотите изменить свой второй «на» на «если». – ysearka

+0

@ysearka, спасибо за то, что вышли. – zaxliu

0

IIUC вы могли бы сделать это с isin подходом для a колонок:

mask = a.columns[a.columns.isin([w, e, r, z])] 
b = a[mask] 

Пример:

np.random.seed(632) 
df = pd.DataFrame(np.random.randn(5, 4), columns = list('abcd')) 

In [56]: df 
Out[56]: 
      a   b   c   d 
0 -0.202506 1.245011 0.628800 -1.787930 
1 -1.076415 0.603727 -1.242478 0.430865 
2 -1.689979 0.885975 -1.408643 0.545198 
3 -1.351751 -0.095847 1.506013 1.454067 
4 -1.081069 -0.162412 -0.141595 -1.180774 

mask = df.columns[df.columns.isin(['a', 'b', 'c', 'e'])] 

In [57]: mask 
Out[57]: Index(['a', 'b', 'c'], dtype='object') 

In [58]: df[mask] 
Out[58]: 
      a   b   c 
0 -0.202506 1.245011 0.628800 
1 -1.076415 0.603727 -1.242478 
2 -1.689979 0.885975 -1.408643 
3 -1.351751 -0.095847 1.506013 
4 -1.081069 -0.162412 -0.141595