반응형
str.contains를 사용하여 NaN을 무시합니다.
다음과 같이 문자열을 포함하는 행을 찾습니다.
DF[DF.col.str.contains("foo")]
단, 이는 일부 요소가 NaN이기 때문에 실패합니다.
ValueError: NA/NaN 값을 포함하는 벡터로 인덱싱할 수 없습니다.
그래서 나는 난독화 된 것에 의지한다.
DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")]
더 좋은 방법이 있을까요?
거기에 깃발이 있다.
In [11]: df = pd.DataFrame([["foo1"], ["foo2"], ["bar"], [np.nan]], columns=['a'])
In [12]: df.a.str.contains("foo")
Out[12]:
0 True
1 True
2 False
3 NaN
Name: a, dtype: object
In [13]: df.a.str.contains("foo", na=False)
Out[13]:
0 True
1 True
2 False
3 False
Name: a, dtype: bool
다음의 문서를 참조해 주세요.
na : 기본 NaN. 결측값 입력.
따라서 다음 작업을 수행할 수 있습니다.
In [21]: df.loc[df.a.str.contains("foo", na=False)]
Out[21]:
a
0 foo1
1 foo2
위의 답변 외에 단어 이름이 없는 열에 대해서는 다음을 사용할 수 있습니다.-
df[df['Product ID'].str.contains("foo") == True]
이게 도움이 됐으면 좋겠다.
df[df.col.str.contains("foo").fillna(False)]
(실제로 답을 찾기 위해 여기에 온) 이유를 100% 알 수는 없지만, 이것도 작동하며 모든 nan 값을 교체할 필요는 없습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame([["foo1"], ["foo2"], ["bar"], [np.nan]], columns=['a'])
newdf = df.loc[df['a'].str.contains('foo') == True]
유무에 관계없이 기능.loc
.
이게 왜 효과가 있는지 모르겠어요. 브라켓으로 지수를 작성하면 판다는 브라켓 안에 뭐가 있는지 평가합니다.True
또는False
괄호 안에 있는 문구를 '추가 부울'로 하는 것이 왜 효과가 있는지 전혀 알 수 없습니다.
를 사용할 수도 있습니다.query
다음과 같이 부울식을 사용하여 DataFrame 열을 쿼리하는 메서드입니다.
df.query('a.str.contains("foo", na=False)')
퍼포먼스는 향상되지 않을 수 있지만 (논쟁의의 여지가 있는) 가독성이 향상됩니다.
다음과 같이 할 수도 있습니다.
DF[DF.col.str.contains(pat = '(foo)', regex = True) ]
언급URL : https://stackoverflow.com/questions/28311655/ignoring-nans-with-str-contains
반응형
'programing' 카테고리의 다른 글
잭슨을 사용하여 오브젝트에 raw JSON을 포함하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
---|---|
Python에서 문자열을 더블로 변환하려면 어떻게 해야 하나요? (0) | 2022.10.20 |
Java에서 파일이 변경된 수신기 (0) | 2022.10.20 |
동적 키 이름으로 reactjs setState()? (0) | 2022.10.20 |
null의 'addEventListener' 속성을 읽을 수 없습니다. (0) | 2022.10.10 |