2017-01-30 54 views
3

我試圖在熊貓系列上使用布爾索引來確定我的系列中是否有不是字符串的值。如何確定在熊貓系列中是否有非字符串值

我的做法,到目前爲止是:

contains_non_string = s[type(s) != str].any() 

當我運行它,我得到以下錯誤:

TypeError: 'int' object is not subscriptable 

我怎樣才能正確地判斷是否有在我的系列爲非字符串值?我正在運行Python 3.6和Pandas 0.19.2。

回答

1

,你可以這樣做:

contains_non_string = s[s.apply(type) != str].any() 
+0

Thanks!這工作!你能否幫我理解爲什麼我的版本錯了? – MRR

+1

當然,'type(s)'是一個系列,'type(s)!= str'計算爲一個布爾值。它不採用該系列中每個元素的類型,而是採用該系列本身的類型。 – acushner

+1

突然他明白了。非常感謝! – MRR

0

另一種解決方案:

In [22]: s = pd.Series([0,'sss',np.nan,3,'aaa',4]) 

In [23]: s 
Out[23]: 
0  0 
1 sss 
2 NaN 
3  3 
4 aaa 
5  4 
dtype: object 

In [24]: (s.map(type) != str).any() 
Out[24]: True 

In [25]: s[s.map(type).ne(str)] 
Out[25]: 
0  0 
2 NaN 
3  3 
5  4 
dtype: object 
0

有時是有用的各種類型的一系列計數。以下內容完全一樣 -

s.apply(type).value_counts()

相關問題