# 1. 판다스 라이브러리 불러오기
import pandas as pd
# 2. 데이터 프레임 만들기
df=pd.DataFrame( # df라는 변수에 데이터 프레임을 담아 줍니다.
{ "a" : [4,5,6,7], # 열 이름을 지정해 주고 시리즈 형태로 데이터를 저장합니다.
"b" : [8,9,10,11],
"c" : [12,13,14,15]},
index=[1,2,3,4]) # 인덱스는 1,2,3으로 정해 줍니다.
# 3. 데이터 프레임 출력하기
df # 데이터 프레임의 이름을 입력해 출력합니다.

# 4. 데이터의 열 이름을 따로 지정해서 만들기
df=pd.DataFrame(
{ "a" : [4,5,6,7],
"b" : [8,9,10,11],
"c" : [12,13,14,15]},
index=[1,2,3,4],
columns=['a','b','c']) # 열 이름을 따로 정해 줄 수 있습니다.
df

# 5. 인덱스가 두 개인 데이터 프레임 만들기
df=pd.DataFrame(
{ "a" : [4,5,6,7],
"b" : [8,9,10,11],
"c" : [12,13,14,15]},
index=pd.MultiIndex.from_tuples( # 인덱스를 튜플로 지정합니다.
[('d',1),('d',2),('e',1),('e',2)],
names=['n','v']) # 인덱스 이름을 지정합니다.
df

# 6. 특정 열 값을 기준으로 정렬하기
df.sort_values('a',ascending=False) # ascending=False를 적어 주면 역순으로 정렬

# 7. 열 이름 변경하기
df.rename(columns=['c':'d'] # c열 이름을 d로 변경합니다.

# 8. 인덱스 값 초기화하기
df.reset_index()

# 9. 인덱스 순서대로 정렬하기
df.sort_index()

# 10. 특정 열 제거하기
df.drop(columns=['a','b'])

# 11. 맨 위의 행 출력하기
df.head(2) # 2 행을 출력합니다.

# 12. 맨 아래의 행 출력하기
df.tail(2) # 2 행을 출력합니다.

# 13. 특정 열의 값을 추출하기
df[df["a"]>4] # a열 중 4보다 큰 값이 있을 경우 해당 행을 추출합니다.

# 14. 특정 열에 특정 값이 있을 경우 추출하기
df[df["a"]==6] # a열 중 6이 있을 경우 해당 행을 추출합니다.

# 15. 특정 열에 특정 값이 없을 경우 추출하기
df[df["a"]!=5] # a열 중 5가 없을 경우 해당 행을 추출합니다.

# 16. 특정 열에 특정 숫자가 있는지 확인하기
df[df["a"].isin([4])] # 원하는 숫자를 리스트([int]) 형식으로 써 줍니다.

# 17. 특정 비율로 데이터 샘플링하기
df.sample(frac=0.75) # 실행할 때마다 정해진 비율만큼 랜덤하게 추출합니다.

# 18. 특정 개수만큼 데이터 샘플링하기
df.sample(n=3) # 실행할 때마다 n에서 정한 만큼 랜덤하게 추출합니다.

# 19. 특정 열에서 큰 순서대로 불러오기
df.nlargest(3,'a') # a열에서 큰 순서대로 세 개를 불러옵니다.

# 21. 인덱스의 범위로 불러오기
# 0부터 세므로 첫 번째 줄의 인덱스는 0, 4번째 줄은 인덱스 3이 됩니다.
df.iloc[1:4] # [a:b]의 경우 a 인덱스부터 b-1 인덱스까지 불러오라는 의미입니다.
# a열에서 순서대로 세 개를 불러옵니다.

# 22. 첫 인덱스를 지정해 불러오기
df.iloc[2:] # [a:]는 a 인덱스부터 마지막 인덱스까지 불러오라는 의미입니다.

# 23. 마지막 인덱스를 지정해 불러오기
df.iloc[:3] # [:b]는 처음부터 b-1 인덱스까지 불러오라는 의미입니다.

# 24. 모든 인덱스 불러오기
df.iloc[:] # [:]는 모든 인덱스를 불러오라는 의미입니다.

# 25. 특정 열을 지정해 가져오기
df[['a','b']] # a열과 b열을 가져오라는 의미입니다.

# 26. 조건을 만족하는 열가져오기
df.filter(regex='c') # 열 이름에 c라는 문자가 포함되어 있으면 출력하라는 의미입니다.

# 27. 특정 문자가 포함되지 않는 열 가져오기
# 열 이름에 c라는 문자가 포함되어 있지 않으면 출력하라는 의미입니다.
df.filter(regex='^(?!c$).*')
