팬더 열에 특정 값이 포함되어 있는지 확인하는 방법
Pandas 열에 특정 값을 가진 항목이 있는지 확인하려고합니다. 나는 이것을 시도했다 if x in df['id']. 나는 그것이 내가 43 in df['id']반환 한 열에 없다는 것을 알고있는 값을 먹일 때를 제외하고는 이것이 효과가 있다고 생각 했습니다 True. 누락 된 ID와 일치하는 항목 만 포함하는 데이터 프레임의 하위 집합을 df[df['id'] == 43]만들면 분명히 항목이 없습니다. Pandas 데이터 프레임의 열에 특정 값이 포함되어 있는지 확인하고 현재 방법이 작동하지 않는 이유는 무엇입니까? (참고로, 비슷한 질문에 대한 이 답변 의 구현을 사용할 때 동일한 문제가 있습니다 ).
in 시리즈의 값이 값이 색인에 있는지 확인합니다.
In [11]: s = pd.Series(list('abc'))
In [12]: s
Out[12]:
0 a
1 b
2 c
dtype: object
In [13]: 1 in s
Out[13]: True
In [14]: 'a' in s
Out[14]: False
한 가지 옵션은 고유 한 값 인지 확인하는 것입니다 .
In [21]: s.unique()
Out[21]: array(['a', 'b', 'c'], dtype=object)
In [22]: 'a' in s.unique()
Out[22]: True
또는 파이썬 세트 :
In [23]: set(s)
Out[23]: {'a', 'b', 'c'}
In [24]: 'a' in set(s)
Out[24]: True
@DSM이 지적했듯이 값에 직접 사용하는 것이 더 효율적일 수 있습니다 (특히 하나의 값 으로이 작업을 수행하는 경우).
In [31]: s.values
Out[31]: array(['a', 'b', 'c'], dtype=object)
In [32]: 'a' in s.values
Out[32]: True
당신은 또한 사용할 수 있습니다 pandas.Series.isin를 가 조금보다 더 오래 비록 'a' in s.values:
In [2]: s = pd.Series(list('abc'))
In [3]: s
Out[3]:
0 a
1 b
2 c
dtype: object
In [3]: s.isin(['a'])
Out[3]:
0 True
1 False
2 False
dtype: bool
In [4]: s[s.isin(['a'])].empty
Out[4]: False
In [5]: s[s.isin(['z'])].empty
Out[5]: True
그러나 DataFrame에 대해 여러 값을 한 번에 일치시켜야하는 경우이 방법이 더 유연 할 수 있습니다 ( DataFrame.isin 참조 ).
>>> df = DataFrame({'A': [1, 2, 3], 'B': [1, 4, 7]})
>>> df.isin({'A': [1, 3], 'B': [4, 7, 12]})
A B
0 True False # Note that B didn't match 1 here.
1 False True
2 True True
found = df[df['Column'].str.contains('Text_to_search')]
print(found.count())
found.count()의지는 경기의 수를 포함
그리고 0이면 열에서 문자열을 찾을 수 없음을 의미합니다.
또는 사용 Series.tolist하거나 Series.any:
>>> s = pd.Series(list('abc'))
>>> s
0 a
1 b
2 c
dtype: object
>>> 'a' in s.tolist()
True
>>> (s=='a').any()
True
Series.tolist makes a list about of a Series, and the other one i am just getting a boolean Series from a regular Series, then checking if there are any Trues in the boolean Series.
Simple condition:
if any(str(elem) in ['a','b'] for elem in df['column'].tolist()):
Use
df[df['id']==x].index.tolist()
If x is present in id then it'll return the list of indices where it is present, else it gives an empty list.
I did a few simple tests:
In [10]: x = pd.Series(range(1000000))
In [13]: timeit 999999 in x.values
567 µs ± 25.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [15]: timeit x.isin([999999]).any()
9.54 ms ± 291 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [16]: timeit (x == 999999).any()
6.86 ms ± 107 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [17]: timeit 999999 in set(x)
79.8 ms ± 1.98 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [21]: timeit x.eq(999999).any()
7.03 ms ± 33.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [22]: timeit x.eq(9).any()
7.04 ms ± 60 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [24]: timeit 9 in x.values
666 µs ± 15.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Interestingly it doesn't matter if you look up 9 or 999999, it seems like it takes about the same amount of time using the in syntax (must be using binary search)
In [24]: timeit 9 in x.values
666 µs ± 15.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [25]: timeit 9999 in x.values
647 µs ± 5.21 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [26]: timeit 999999 in x.values
642 µs ± 2.11 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [27]: timeit 99199 in x.values
644 µs ± 5.31 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [28]: timeit 1 in x.values
667 µs ± 20.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Seems like using x.values is the fastest, but maybe there is a more elegant way in pandas?
I don't suggest to use "value in series", which can lead many errors. Please see this answer for detail: Using in operator with Pandas series
'IT박스' 카테고리의 다른 글
| Tortoise의 비 재귀 커밋은 어떻게 작동합니까? (0) | 2020.08.04 |
|---|---|
| ODBC없이 Java에서 Access 데이터베이스 조작 (0) | 2020.08.04 |
| Team Foundation 작업 항목 유형의 제품 백 로그 항목과 기능의 차이점 (0) | 2020.08.04 |
| HTML5 로컬 스토리지 대체 솔루션 (0) | 2020.08.04 |
| JS를 사용하여 옵션 목록을 표시하기 위해 HTML 선택을 열 수 있습니까? (0) | 2020.08.04 |