07_select rows from columns value
| 7 Minute Read on Pandas
select rows from where columns condition¶
- Pandas에서도 sql처럼 특정 columns의 값들을 조건을 기반으로 row를 조회하고 싶어 한다.
- 즉, select * from table where colume_name = some_value 같은 형태를 의미한다.
- 위의 표현식을 dataframe을 사용할 경우에는 다음과 같이 표현 할 수 있다.
- df.loc[df['column_name'] == some_value]
- df.loc[df['column_name'] != some_value] -- not 조건
- sql의 In 처럼 여러개의 값(multiple_values)을 선택하려면 isin을 사용한다.
- df.loc[df['column_name'].isin(multiple_values)]
- df.loc[~df['column_name'].isin(multiple_values)] -- isin을 사용할 경우 부정은 앞에 ~를 사용
- loc[]의 인자로 boolean 값이 들어가는 boolean indexing의 형태임.
- 만약에 조건이 2개 이상이면 & 연산자를 다음과 같이 사용한다.
- df.loc[(df['column_name1'] == some_value1) & (df['column_name2'] == some_value2)]
- df.loc[(df['column_name'] == some_value) & df['other_column'].isin(multiple_values)]
</div>
In [1]:
import pandas as pd
import numpy as np
data = np.arange(12).reshape((3, 4))
index = [2003, 2004, 2005 ]
columns = ['Arizona','Boston', 'Chicago','Detroit']
df = pd.DataFrame(data = data, index = index, columns = columns)
In [2]:
# 컬럼 조건이 하나일 경우
df.loc[df['Arizona'] == 0] # <-- df.loc[df.loc[:,'Arizona'] == 0] 와 같은 의미
Out[2]:
In [3]:
# .loc[] 를 생략할 수 있음
print(df[df['Arizona'] == 0])
In [4]:
# not 조건이면 '==' 대신에 '!= '를 사용한다.
df[df['Arizona'] != 0]
Out[4]:
In [11]:
# 조건에 컬럼 비교를 위해 부등호를 넣을 수 있다.
data = np.random.randn(3, 4)
df = pd.DataFrame(data = data, index = index, columns = columns)
print(df)
df[df['Arizona'] > df['Detroit']]
Out[11]:
In [12]:
#applymap과 lambda를 사용하여 숫자를 문자로 치환함
df = df.applymap(lambda x: 'Win' if x > 1 else 'Final' if x > 0 else 'Lose')
print(df)
In [15]:
# 조건에 문자열
df.loc[df['Arizona']=='Lose']
Out[15]:
In [14]:
# 조건에 여러개의 값은 isin을 사용
some_values = ['Win','Final']
df.loc[df['Arizona'].isin(some_values)]
Out[14]:
In [19]:
# isin의 부정 조건
df.loc[~df['Arizona'].isin(['Win'])]
Out[19]:
In [20]:
#만약에 조건이 2인 경우에 & 연산자를 사용.
df.loc[(df['Arizona'] == 'Final') & (df['Boston'] == 'Final')]
Out[20]: