2016-04-12 18 views
1

ile benzer R'nin aşağıdaki güzel çözümüne benzer bir Python çözümü var mı? Ar iseDoğru değil, 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 

, sen etkisiz hale getirmesine ! kullanabilirsiniz, ancak ben Python gibi güzel bir çözüm rastlamak değil: Biliyorum

# 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 

en Pythonictir çözüm taşımaktadır:

string_data[null_values != True] 

0  aardvark 
1 artichoke 
3  avocado 
dtype: object 

Bu yapabileceğim en iyi şey buysa, bu harika, ama Python'da yeniyim ve bu özel soruyu hiçbir yerde görmedim.

cevap

5

Sen ! yerine ~ kullanmak zorunda: @SethMMorton açıklamalarda işaret ettiği gibi

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

, mantıksal DEĞİL genellikle örneğin Python düz içinde not ile yapılır not True, False'u döndürür. ~, bitwise NOT operator'dur. pandas, yalnızca bu özel durumlarda yayınlanmış mantıksal not anlamına gelen aşırı yüklenmeler anlamına gelir, çünkü Python aşırı yükleme not'a izin vermez.

+3

Python'da bir değerin mantıksal karşıtını belirtmek için genel olarak '' 'kullanılmadığını, fakat özel sayı dizisi dizilerinde veya Pandas Dataframes/Serisinde' ~ (complement) operatörünün kullanıldığını belirtmek isterim. kullanıldı. – SethMMorton

+0

@SethMMorton Bu doğrudur ve cevabımı aynısını yansıtacak şekilde güncelledim. –

+0

Not etmek güzel, detaylar için teşekkürler. –