2016-04-12 95 views
0

I'm新的Python,我試圖從一個數據幀得到行/列的一個子集:質疑熊貓據幀

In [1]: 
from pandas import Series, DataFrame 
import pandas as pd 
import numpy as np 

In [2]: 
example=DataFrame(np.random.rand(6,5),columns=['a','b','c','d','e']) 

In [3]: 
example.a={2,4,6,8,10,12} 

In [4]: 
example 

Out[4]: 
    a b c d e 
0 2 0.225608 0.023888 0.535053 0.953350 
1 4 0.803721 0.741708 0.256522 0.062574 
2 6 0.354936 0.597274 0.801495 0.763515 
3 8 0.204974 0.870951 0.220088 0.446273 
4 10 0.673855 0.0.494213 0.842049 
5 12 0.516609 0.038669 0.972165 0.183945 

In [5]: 
example[['a','b','d','e']].query('a==10') 

Out[5]: 
    a b d e 
4 10 0.673855 0.494213 0.842049 

In [6]: 
example[['b','d','e']].query('a==10') 

..... 

UndefinedVariableError: name 'a' is not defined 

的第一種情況是好的,但我在2遇到錯誤查詢,你知道爲什麼這個錯誤出現嗎?非常感謝你

+0

in'example [['b','d','e']]'你只有一個子集不包括列'a'的示例' – Swier

+0

謝謝,我已經包括了一個,現在它的工作原理! – Sandra

回答

2

example[['b','d','e']]您只有一個子集example不包括列a

要從a==10的行中獲取值['b','d','e'],您只需將查詢和索引轉向即可。所以首先查詢,只返回該行,然後在該行上使用索引:

In[113]: example.query('a==10')[['b','c','d']] 
Out[113]: 
      b   c   d 
4 0.439672 0.181699 0.770421 
0

當你創建第二個選擇example[['b','d','e']],您可以有效地降「一」從數據框:

example[['b','d','e']] 
b d e 
0 0.910757 0.565006 0.284420 
1 0.601034 0.697879 0.983803 
2 0.516938 0.829621 0.471825 
3 0.896217 0.663177 0.093502 
4 0.277488 0.796543 0.643166 
5 0.594420 0.759634 0.164800 

所以你試圖訪問不存在的列。換句話說,如果你想查詢數據框中的列,你需要在查詢之前將其包含在你的選擇中。