2016-04-12 9 views
1

以下のRの素晴らしいソリューションに似たPythonソリューションはありますか? Rで真ではない、PythonはRに似ています

# R 
set.seed(1245) 
array_truth <- sample(c(T, F), 10, replace = T) 
array_int <- 1:10 

# get the integers with False index 
> array_int[!array_truth] 

[1] 1 2 4 

、あなたは否定する!を使用することができますが、私は素晴らしいとPythonで解決策を遭遇していない:

# python 
string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado']) 
null_values = string_data.isnull() 
null_values 

0 False 
1 False 
2  True 
3 False 
dtype: bool 

私の知っているほとんどのPython的解決策は次のとおりです。

string_data[null_values != True] 

0  aardvark 
1 artichoke 
3  avocado 
dtype: object 

私ができることはこれでいいですが、これは素晴らしいことですが、私はPythonを初めて使っていて、この特定の質問はどこにも見ていません。

答えて

5

あなたは!の代わりに~を使用する必要があります。

>>> string_data[~string_data.isnull()] 
0  aardvark 
1 artichoke 
3  avocado 
dtype: object 

@SethMMortonはコメントで指摘するように、論理否定は通常、例えば、プレーンPythonでnotで行われますnot TrueFalseを返します。 ~bitwise NOT operatorです。 pandasは、ブロードキャストされた論理notを意味するように~をオーバーロードします。これは、Pythonではオーバーロードが許可されないため、notです。

+3

一般的には、値の論理的な反対を示すためにPythonでは 'not'が使われていますが、numpy配列やPandas Dataframes/Seriesの特定のケースでは'〜 '(補数)演算子使用されている。 – SethMMorton

+0

@SethMMortonこれは本当であり、私は同じ答えを反映するために私の答えを更新しました。 –

+0

注意しておきましょう。 –

関連する問題