# df.loc[가져올 행, 가져올 열]
df.loc[:,'a':'c'] # 모든 인덱스에서 a열부터 c열까지 가져오라는 의미
# df.iloc[인덱스, 가져올 열]
df.iloc[0:3,[0,2]] # 0 인덱스부터 2 인덱스까자 0번째 열과 2번쨰 열 가져오라는 의미
# df.iloc[조건을 만족하는 특정 df, 가져올 행과 열]
df.loc[df['a']>5,['a','c']] # a열의 값이 5보다 큰 경우 a열과 c열을 출력하라는 의미
#df.iat[가져올 값의 행, 가져올 값의 열]
df.iat[1,2] # 1번쨰 인덱스에서 2번째 열 값을 가져온다.
: iloc와 iat 앞에 붙은 i는 integer에서 따온 것, 즉 인덱스와 컬렴명을 사용하지 않고 대신 행과 컬럼의 위치에 대하여 정수를 사용하고 싶을 때 사용하면 된다.
df.loc[['A', 'B', 'C'], 'english']
df.iloc[1:3, 0:2]
df.at['C', 'english']
df.iat[4, 0]
사용할 데이터 프레임

# values_counts() : 특정 열에 대하여 어떤 값이 몇 개 들어있는지
# 디폴트는 내림차순, 오름차순으로 하려면 ascending=True 옵션
df['a'].value_counts()
len(df)
# (행, 열) 개수가 출력된다.
df.shape
# 데이터에 고유값들의 '수'를 출력해주는 함수
# unique() 함수는 데이터의 고윳값들의 '종류'를 출력해주는 함수
df['a'].nunique()
# DataFrame 형태인 경우 열에 대한 요약, NaN값은 제외된다.
# 열 별 총 데이터 수, 평균, 표준편차, 최솟값, 백분위수 25%/50%/75%, 최댓값
df.describe()
duplicated(subset=None, keep='first') : 중복데이터가 있는 행에 True로 마크하여 boolean 형태의 Series를 반환
-keep : {'first'/'last'/False} 어떤 데이터를 제외하고 나머지 중복 데이터를 True로 마킹할지. first면 첫번쨰로 발견된 중복 데이터를 제외하고, last면 마지막으로 발견된 중복 데이터를 제외한다. False면 모든 중복 데이터를 True로 마킹한다.
drop_duplicates(subset=None, keep='first', inplace=False,ignore_index=False) : 중복 데이터를 제거한 DataFrame을 반환
-keep : {'first'/'last'/False} 중복 제거를 할 때 남길 행. first면 첫 값을 남기고, last면 마지막 값을 남긴다. False면 모든 중복데이터를 삭제한다.
-inplace : 원본 데이터를 변경할 것인지, 수정된 복사본을 반환할 것인지 여부
-ignore_index : 원래 index를 무시할 지 여부. True면 0~n으로 부여
df=df.drop_duplicates()
df.sum()
df.count()
df.median()
df['b'].mean()
df.quantile([0.25,0.75])

df.min()
df.max()
df.std()
import numpy as np
df.apply(np.sqrt) # 제곱근 구하기

사용할 데이터 프레임( NaN 값은 np.nan으로 하면 된다)

# NaN값이면 True, NaN값이 아니면 False인 boolean을 반환
pd.isnull(df)

# NaN값이 아니면 True, NaN값이면 False인 boolean을 반환
pd.notnull(df)

df_notnull=df.dropna()

df_fillna=df.fillna(13)

# a열의 평균값으로 대체
df_fillna_mean=df.fillna(df['a'].mean())
