반응형
In [3]:
import numpy as np
import pandas as pd
Dataframe Boolean Index¶
- 데이타프레임 인덱스시 사용됨
- 마스크(Mask)라고도 함
- 조건에 맞으면 결과값이 True/False 형태의 Boolean으로 표시
- df.loc [ df[ 컬럼인덱스] 비교연산자 ]
- df.loc [ df[ 행인덱스] 비교연산자 ]
- 다중 조건시 논리 연산자 사용
In [42]:
data = { "year":[2014, 2015, 2016, 2015, 2017,2013]
,"name":['Haidi', 'Haidi', 'Haidi', 'Charles', 'Charles', 'Hayoung']
, "points":[1.5, 1.7, 3.6, 2.5, 2.9, 4.0]
, "penalty":[0.1,0.2, 0.3,0.4,0.5,0.1 ]
, "net_points":[1.4,1.5,3.3,2.1,2.4,2.1]
, "bonus":[10,20,30,40,50,60]}
df = pd.DataFrame(data,
columns=["year","name","points",
"penalty","net_points","bonus"],
index=["one", "two", "three", "four", "five","six"])
df
Out[42]:
비교연산자를 이용하여 시리즈 생성¶
In [3]:
df["year"] > 2014
Out[3]:
조건에 맞는 행 추출하기¶
- df.loc [ df[ 행인덱스] 비교연산자 ]
In [7]:
df.loc[df["year"]>2014, :]
Out[7]:
조건에 맞는 행과 열 추출하기¶
In [9]:
df["name"]== "Charles"
Out[9]:
In [10]:
df.loc[df["name"]== "Charles", ["name", "points"]]
Out[10]:
비교 연산자 이용하기 - & and¶
In [11]:
df["points"] > 2
Out[11]:
In [12]:
df["points"] < 3
Out[12]:
In [6]:
df.loc[ (df["points"] > 2) & (df["points"] < 3), :]
Out[6]:
In [13]:
df.loc[ (df["points"] > 2) & (df["points"] < 3), ["name", "points"]]
Out[13]:
Boolean Indexing 처리 후에 새로운 값 입력하기¶
In [14]:
df
Out[14]:
In [15]:
df["points"] > 3
Out[15]:
In [16]:
df.loc[df["points"] > 3, :]
Out[16]:
In [17]:
df.loc[df["points"] > 3, "penalty"]
Out[17]:
In [43]:
df.loc[df["points"] > 3, "penalty"] = 0
In [44]:
df
Out[44]:
퀴즈¶
- 위의 데이타프레임에서 bonus > 40 를 80으로 변경하여라
- 위의 데이타프레임에서 name 이 'Haidi인 net_points 값을 0으로 변경하여라
In [45]:
df.loc[df["bonus"] > 40, "bonus"] = 40
df
Out[45]:
In [46]:
df["name"] == 'Haidi'
Out[46]:
In [47]:
df.loc[df["name"] == 'Haidi', 'net_points'] = 0
df
Out[47]:
Dataframe – 랜덤 숫자로 구성¶
- 데이타프레임이름 = pd.DataFrame(np.random.randn(행수,열수))
In [29]:
# 넘파이 랜덤 숫자를 이용하여 데이타프레임 생성하기
df = pd.DataFrame(np.random.randn(6,4))
Dataframe – 컬럼 이름¶
-데이타프레임.columns=[컬럼리스트]
In [32]:
df.columns = ["A","B","C","D"]
df
Out[32]:
In [34]:
df.index = ['row1','row2','row3','row4','row5','row6']
df
Out[34]:
Dataframe – 날짜 데이터¶
- pd.date_range() 함수는 날짜 생성 - 초기날짜, 단계
- pd.date_range( 초기날짜, periods=숫자)
In [38]:
# 인덱스로 사용할 날짜 인덱스 리스트 생성
df_date = pd.date_range("20190731", periods=10)
df_date
Out[38]:
In [40]:
df = pd.DataFrame(np.random.randn(10,4), columns=["A","B","C","D"])
df
Out[40]:
날짜 인덱스를 데이타프레임 인덱스로 지정¶
데이타프레임.index = 날짜인덱스변수
In [41]:
df.index = df_date
df
Out[41]:
퀴즈¶
1~100 사이의 숫자중 30개를 추출한 후 날짜 인덱스를 이용하여 5행 6열의 데이타프레임을 생성하여라
In [51]:
df2 = pd.DataFrame( np.random.randint(1,101, size=30).reshape(5,6),
index = pd.date_range("20190731", periods=5)
)
df2
Out[51]:
결측치관련 함수¶
- 결측치란? 데이타가 없다
NaN : Not a Number
결측치가 있다면 행 모두 삭제
데이타프레임.dropna(how='any') 데이타프레임.dropna(how='all')
결측치 값을 특정 값으로 교체
데이타프레임이름.fillna(value=값)
결측치가 있는 셀은 True로 표시
데이타프레임이름.isnull() 데이타프레임이름.loc(데이타프레임이름.isnull(), :)
Dataframe – np.nan 값 입력하기¶
In [54]:
df = pd.DataFrame(np.random.randn(5,4),
index = pd.date_range("20190731", periods=5),
columns=["A","B","C","D"])
F컬럼 추가하기¶
In [55]:
df["F"] = [1.0, np.nan, 3.5, 6.1, np.nan]
df
Out[55]:
결측치가 하나라도 있으면 행 모두 삭제하기¶
- 데이타프레임이름.dropna(how="any")
In [56]:
df
Out[56]:
In [57]:
df.dropna(how="any")
Out[57]:
In [58]:
df
Out[58]:
inplace=True 사용하기¶
In [59]:
df.dropna(how="any", inplace=True)
In [60]:
df
Out[60]:
In [ ]:
NaN 값이 모두 들어있는 행 삭제하기¶
- 데이타프레임이름.dropna(how="all") : 원본의 데이타가 삭제되지 않는다.
- 데이타프레임이름.dropna(how="all", inplace=True ) : 원본 데이타도 삭제
In [67]:
data = {"a":[2,np.NAN,3],
"b":[np.NAN,np.NAN,np.NAN],
"c":[1,np.NAN,np.NAN]}
df = pd.DataFrame(data)
In [70]:
df.dropna(how="all", inplace=True)
In [71]:
df
Out[71]:
Dataframe – NaN값에 특정 값 입력하기¶
- 데이타프레임이름.fillna(value=값)
- 데이타프레임이름.fillna(value=값, inplace=True)
In [72]:
data = {"a":[2,np.NAN,3],
"b":[np.NAN,np.NAN,np.NAN],
"c":[1,np.NAN,np.NAN]}
df = pd.DataFrame(data)
df
Out[72]:
In [73]:
df.fillna(value=3.0)
Out[73]:
In [75]:
df
Out[75]:
In [76]:
# df=df.fillna(value=3.0)
df.fillna(value=3.0, inplace=True)
df
Out[76]:
NaN값에 Boolean 마스크 실행하기¶
- 데이타프레임.isnull()
- 결과값이 Boolean Index 처럼 True/False로 표시
- NaN 값이 있는 셀은 True로 표시
In [21]:
data = {"a":[2,np.NAN,3],
"b":[np.NAN,np.NAN,np.NAN],
"c":[1,np.NAN,np.NAN]}
In [22]:
df = pd.DataFrame(data)
df
Out[22]:
NaN 값이 있는 셀은 True로 표시된다.¶
In [23]:
df.isnull()
Out[23]:
NaN 값이 들어있는 셀의 행 추출하기¶
- 데이타프레임.loc[데이타프레임.isnull()[NaN값이 있는 열], :]
5행3열의 데이타프레임 생성후 특정 값을 결측치로 교체하기¶
In [80]:
df = pd.DataFrame(np.random.randn(5,3), columns=["A","B","C"])
df
Out[80]:
In [84]:
df.loc[0,"A"] = np.NaN
df.loc[4,"A"] = np.NaN
df.loc[3,"C"] = np.NaN
df
Out[84]:
"A" 컬럼에 NaN이 있는 행 추출¶
In [85]:
df.isnull()["A"]
Out[85]:
df.loc[조건식]을 이용해서 A 컬럼에 NaN이 있는 행 추출하기¶
In [89]:
df.loc[df.isnull()["A"]]
Out[89]:
In [90]:
df.loc[df.isnull()["A"],['B']]
Out[90]:
In [ ]:
반응형