2016-08-08 2 views
1

문자열이 열 값에 해당하는 행을 필터링하려면 data.sample_id.str.contains('hph') (전에 대답 : check if string in pandas dataframe column is in list 또는 Check if string is in a pandas dataframe)과 같은 것을 사용할 수 있습니다.pandas 문자열에 조회가 포함되어 있습니다. NaN이 값 오류로 연결

그러나 내 조회 열에 emtpy 셀이 포함되어 있습니다. Terefore, str.contains()NaN 값을 산출하며 색인 생성시 값 오류가 발생합니다.

`ValueError: cannot index with vector containing NA/NaN values`` 

어떻게 작동합니다

# get all runs 
mask = [index for index, item in enumerate(data.sample_id.values) if 'zent' in str(item)] 

이 아닌 (str.contains() 유사) 더 우아하고 빠른 방법이 있습니까?

답변

1

(@ jezrael의 대답) 청소기 될 것 na=False을 통과 생각 :

df = pd.DataFrame({'a':['hph', np.NaN, 'sadhphsad', 'hello']}) 
print (df) 
      a 
0  hph 
1  NaN 
2 sadhphsad 
3  hello 

print (df.a.str.contains('hph', na=False)) 
0  True 
1 False 
2  True 
3 False 
Name: a, dtype: bool 
:

print (df.a.str.contains('hph', na=False)) 

EdChum 샘플을 사용하여

1

당신은 그 행을 필터링 할 수 있습니다 IIUC 또한

data['sample'].dropna().str.contains('hph') 

예 : 더 NaN

가 없을 것으로 먼저 다음 안전하게 Seriesstr.contains을 사용할 수 있습니다 dropna를 호출 그래서

In [38]: 
df =pd.DataFrame({'a':['hph', np.NaN, 'sadhphsad', 'hello']}) 
df 

Out[38]: 
      a 
0  hph 
1  NaN 
2 sadhphsad 
3  hello 

In [39]: 
df['a'].dropna().str.contains('hph') 

Out[39]: 
0  True 
2  True 
3 False 
Name: a, dtype: bool 

null 값을 처리하는 또 다른 방법은 notnull을 사용하는 것입니다.

In [43]: 
(df['a'].notnull()) & (df['a'].str.contains('hph')) 

Out[43]: 
0  True 
1 False 
2  True 
3 False 
Name: a, dtype: bool 

하지만 난 당신이 str.containsFalse에 매개 변수 na을 설정할 수 있습니다

관련 문제