2016-11-09 26 views
1

我試圖根據值過濾DataFrame列。基於值(Pandas)過濾列:TypeError:無法將['a']與塊值進行比較

In[41]: df = pd.DataFrame({'A':['a',2,3,4,5], 'B':[6,7,8,9,10]}) 
In[42]: df 
Out[42]: 
    A B 
0 a 6 
1 2 7 
2 3 8 
3 4 9 
4 5 10 

過濾列:

In[43]: df.loc[:, (df != 6).iloc[0]] 
Out[43]: 
    A 
0 a 
1 2 
2 3 
3 4 
4 5 

它的工作原理!但是,當我使用的字符串,

In[44]: df.loc[:, (df != 'a').iloc[0]] 

我得到這個錯誤:TypeError: Could not compare ['a'] with block values

+3

這不會對混合dtypes工作爲你找到的操作前一定要檢查各列的數據類型,執行目前不支持DF的比較在任何列都是純數字類型的情況下,您必須首先過濾df,才能給出對象dtype列,以便不會引發錯誤 – EdChum

+0

@EdChum:謝謝指出。有道理.. – ramesh

+0

我知道這是一個古老的問題,但我認爲他們固定在「熊貓0.21.0」或「0.22.0」。我在我的測試venv中錯誤地做了這件事,它工作。 – Orenshi

回答

0

你可以用面具做這個代替,例如:

df[df.A!='a'].A 

,並從任何過濾列:

df[df.apply(lambda x: sum([x_=='a' for x_ in x])==0, axis=1)] 
0

這個問題是由於事實上da中有數字和字符串對象taframe。 你可以通過每列循環,並檢查每個列的一系列使用

特定值(系列==「A」)。任何()

0

您正在嘗試比較字符串「A」與數字B列中的值。

如果您希望自己的代碼正常工作,請首先將列B的dtype提升爲numpy.object,它將起作用。

df.B = df.B.astype(np.object) 

使用

df.info()