07_select rows from columns value

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]:
ArizonaBostonChicagoDetroit
20030123
In [3]:
# .loc[] 를 생략할 수 있음
print(df[df['Arizona'] == 0]) 
      Arizona  Boston  Chicago  Detroit
2003        0       1        2        3
In [4]:
#  not 조건이면  '==' 대신에 '!= '를 사용한다.
df[df['Arizona'] != 0]
Out[4]:
ArizonaBostonChicagoDetroit
20044567
2005891011
In [11]:
# 조건에 컬럼 비교를 위해 부등호를 넣을 수 있다.
data  = np.random.randn(3, 4)
df = pd.DataFrame(data = data, index = index, columns = columns)
print(df)                        
df[df['Arizona'] > df['Detroit']]
       Arizona    Boston   Chicago   Detroit
2003  0.907345  0.240986 -0.895304 -2.057843
2004  0.865341 -1.170443 -1.138361  0.100939
2005 -0.076767 -1.259515 -0.717019  1.686924
Out[11]:
ArizonaBostonChicagoDetroit
20030.9073450.240986-0.895304-2.057843
20040.865341-1.170443-1.1383610.100939
In [12]:
#applymap과 lambda를 사용하여 숫자를 문자로 치환함
df = df.applymap(lambda x: 'Win' if x > 1 else 'Final' if  x > 0   else 'Lose') 
print(df)
     Arizona Boston Chicago Detroit
2003   Final  Final    Lose    Lose
2004   Final   Lose    Lose   Final
2005    Lose   Lose    Lose     Win
In [15]:
# 조건에 문자열 
df.loc[df['Arizona']=='Lose']
Out[15]:
ArizonaBostonChicagoDetroit
2005LoseLoseLoseWin
In [14]:
# 조건에 여러개의 값은 isin을 사용
some_values  = ['Win','Final']
df.loc[df['Arizona'].isin(some_values)]  
Out[14]:
ArizonaBostonChicagoDetroit
2003FinalFinalLoseLose
2004FinalLoseLoseFinal
In [19]:
# isin의 부정 조건 
df.loc[~df['Arizona'].isin(['Win'])]
Out[19]:
[2003    True
 2004    True
 2005    True
 Name: Arizona, dtype: bool]
In [20]:
#만약에 조건이 2인 경우에 & 연산자를 사용.
df.loc[(df['Arizona'] == 'Final') & (df['Boston'] == 'Final')]
Out[20]:
ArizonaBostonChicagoDetroit
2003FinalFinalLoseLose


© 2017. All rights reserved.

Powered by ZooFighter v0.12