df
열의 값 closing_price
이 99에서 101 사이 인 행만 포함 하도록 DataFrame을 수정하고 아래 코드로이를 수행하려고합니다.
그러나 오류가 발생합니다.
ValueError : 시리즈의 진실 값이 모호합니다. a.empty, a.bool (), a.item (), a.any () 또는 a.all () 사용
루프를 사용하지 않고 이렇게 할 수있는 방법이 있는지 궁금합니다.
df = df[(99 <= df['closing_price'] <= 101)]
답변
()
모호성을 제거하려면를 사용 하여 부울 벡터를 그룹화 해야합니다 .
df = df[(df['closing_price'] >= 99) & (df['closing_price'] <= 101)]
답변
다음 사이의 시리즈 도 고려하십시오 .
df = df[df['closing_price'].between(99, 101)]
답변
더 좋은 대안이 있습니다-query () 메소드를 사용하십시오.
In [58]: df = pd.DataFrame({'closing_price': np.random.randint(95, 105, 10)})
In [59]: df
Out[59]:
closing_price
0 104
1 99
2 98
3 95
4 103
5 101
6 101
7 99
8 95
9 96
In [60]: df.query('99 <= closing_price <= 101')
Out[60]:
closing_price
1 99
5 101
6 101
7 99
업데이트 : 댓글에 응답 :
나는 여기의 구문을 좋아하지만 expresison과 결합하려고 할 때 아래로 떨어졌습니다.
df.query('(mean + 2 *sd) <= closing_price <=(mean + 2
*sd)')
In [161]: qry = "(closing_price.mean() - 2*closing_price.std())" +\
...: " <= closing_price <= " + \
...: "(closing_price.mean() + 2*closing_price.std())"
...:
In [162]: df.query(qry)
Out[162]:
closing_price
0 97
1 101
2 97
3 95
4 100
5 99
6 100
7 101
8 99
9 95
답변
답변
newdf = df.query('closing_price.mean() <= closing_price <= closing_price.std()')
또는
mean = closing_price.mean()
std = closing_price.std()
newdf = df.query('@mean <= closing_price <= @std')
답변
여러 값과 여러 입력을 처리하는 경우 이와 같은 적용 기능을 설정할 수도 있습니다. 이 경우 특정 범위에 속하는 GPS 위치에 대한 데이터 프레임을 필터링합니다.
def filter_values(lat,lon):
if abs(lat - 33.77) < .01 and abs(lon - -118.16) < .01:
return True
elif abs(lat - 37.79) < .01 and abs(lon - -122.39) < .01:
return True
else:
return False
df = df[df.apply(lambda x: filter_values(x['lat'],x['lon']),axis=1)]
답변
이 대신
df = df[(99 <= df['closing_price'] <= 101)]
이것을 사용해야합니다
df = df[(df['closing_price']>=99 ) & (df['closing_price']<=101)]
쿼리를 합성하려면 NumPy의 비트 논리 연산자 |, &, ~, ^를 사용해야합니다. 또한 괄호는 연산자 우선 순위에 중요합니다.
자세한 정보는 비교, 마스크 및 부울 논리 링크를 참조하십시오.