728x90
반응형
데이터프레임 DataFrame
#데이터프레임 : 여러 개의 시리즈가 모여서 만들어짐
# 딕셔너리의 키는 컬럼명(시리즈 이름)이 됨
# pandas.DataFrame(딕셔너리, index = 행이름, columns= 열이름)
dict_data = {'c0':[1,2,3],'c1':[0,9,8],'c2':[4,5,6],'c3':[7,8,9]}
df = pd.DataFrame(dict_data) # 데이터프레임 생성
print(df); print()
print(df.columns, df.index); print() # 컬럼명, 인덱스명 출력
df.index = ['a','b','c'] # 인덱스명 변경
print(df); print()
print(df.columns, df.index); print()
df.columns = ['a1','a2','a3','a4'] # 컬럼명 변경
print(df); print()
print(df.columns, df.index)
실행결과
c0 c1 c2 c3
0 1 0 4 7
1 2 9 5 8
2 3 8 6 9
Index(['c0', 'c1', 'c2', 'c3'], dtype='object') RangeIndex(start=0, stop=3, step=1)
c0 c1 c2 c3
a 1 0 4 7
b 2 9 5 8
c 3 8 6 9
Index(['c0', 'c1', 'c2', 'c3'], dtype='object') Index(['a', 'b', 'c'], dtype='object')
a1 a2 a3 a4
a 1 0 4 7
b 2 9 5 8
c 3 8 6 9
Index(['a1', 'a2', 'a3', 'a4'], dtype='object') Index(['a', 'b', 'c'], dtype='object')
데이터프레임 만들기 2
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],
index=['a','b','c'],
columns=['c1','c2','c3'])
print(df)
실행결과
c1 c2 c3
a 1 2 3
b 4 5 6
c 7 8 9
행 / 열 이름 지정
# 행 인덱스 / 열 이름 지정
df = pd.DataFrame([[15,'남','덕영중'],[17,'여','수리중']],
index=['준서','예은'], columns=['나이','성별','학교'])
print(df)
print()
# 행 일부 이름 변경 df.rename(index={기존 인덱스명:새로운 인덱스명, ...})
# 열 일부 이름 변경 df.rename(columns={기존 컬럼명:새로운 컬럼명, ...})
df.rename(index={'준서':'학생1'},inplace=True) # inplace = True 기존의 데이터 변경
print(df)
print()
df.rename(columns={'성별':'남여'},inplace=True)
print(df)
실행결과
나이 성별 학교
준서 15 남 덕영중
예은 17 여 수리중
나이 성별 학교
학생1 15 남 덕영중
예은 17 여 수리중
나이 남여 학교
학생1 15 남 덕영중
예은 17 여 수리중
행 / 열 삭제
exam_data = {'수학':[90,80,70],'영어':[98,89,95],
'음악':[85,95,100],'체육':[100,90,90]}
df = pd.DataFrame(exam_data)
print(df)
print()
# 데이터프레임 인덱스명 추가
df.index = ['서준','우현','인아']
print(df); print()
df2 = df.copy() # df2 = df -> 자료 공유
# '우현' 자료를 삭제 (행을 삭제)
df2.drop('우현',inplace=True)
print(df2)
print()
# '수학','체육' 자료 삭제 (열을 삭제)
df2.drop(['수학','체육'],axis=1,inplace=True)
print(df2)
실행결과
수학 영어 음악 체육
0 90 98 85 100
1 80 89 95 90
2 70 95 100 90
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
인아 70 95 100 90
수학 영어 음악 체육
서준 90 98 85 100
인아 70 95 100 90
영어 음악
서준 98 85
인아 95 100
인덱스로 데이터 접근
exam_data = {'수학':[90,80,70],'영어':[98,89,95],
'음악':[85,95,100],'체육':[100,90,90]}
df = pd.DataFrame(exam_data)
df2 = df.copy()
df2.index = ['서준','우현','민아']
print(df2)
print()
# 인덱스로 데이터 접근
# 행 선택 -> df.loc[인덱스명], df.iloc[인덱스첨자]
print(df2.loc['서준'])
print(df2.iloc[0])
print()
#'서준'과 '우현' 자료를 검색
print(df2.loc[['서준','우현']])
print(df2.loc['서준':'우현']) # 범위선택시 마지막 인덱스 포함
print(df2.iloc[[0,1]])
print(df2.iloc[0:2]) # 범위선택시 마지막 인덱스 미포함
print()
# 컬럼 자료 출력
print(df2['수학'])
print(df2.수학)
print()
# 수학,영어,음악 점수 출력
print(df2[['수학','영어','음악']]) # df2['수학':'음악'] - 더이상 지원안함
print()
# 국어 점수를 100,80,90을 df2에 추가
df2['국어']=[100,80,90]
print(df2)
print()
# 새로운 행 추가 df.loc[인덱스명] = [값, ...]
df2.loc['철수'] = [100,80,98,77,90]
print(df2)
실행결과
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
민아 70 95 100 90
수학 90
영어 98
음악 85
체육 100
Name: 서준, dtype: int64
수학 90
영어 98
음악 85
체육 100
Name: 서준, dtype: int64
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
서준 90
우현 80
민아 70
Name: 수학, dtype: int64
서준 90
우현 80
민아 70
Name: 수학, dtype: int64
수학 영어 음악
서준 90 98 85
우현 80 89 95
민아 70 95 100
수학 영어 음악 체육 국어
서준 90 98 85 100 100
우현 80 89 95 90 80
민아 70 95 100 90 90
수학 영어 음악 체육 국어
서준 90 98 85 100 100
우현 80 89 95 90 80
민아 70 95 100 90 90
철수 100 80 98 77 90
원소에 접근
# 각 원소 접근 df.loc[인덱스명, 컬럼명], df.loc[인덱스명][컬럼명]
# df.iloc[인덱스첨자, 컬럼위치 인덱스], df.iloc[인덱스첨자][컬럼위치]
# 서준의 영어점수 검색
print(df2.loc['서준','영어'],df2.loc['서준']['영어'],df2.loc['서준'][1])
print(df2.iloc[0,1],df2.iloc[0]['영어'],df2.iloc[0][1])
# 서준과 우현의 영어 점수
print(df2.loc[['서준','우현'],'영어'])
# 서준의 영어점수를 100으로 수정
df2.loc['서준','영어'] = 100
print(df2)
# 서준부터 민아까지의 수학과 영어점수를 출력
print(df2.loc['서준':'민아',['수학','영어']])
print(df2.loc['서준':'민아'][['수학','영어']])
실행결과
100 100 100
100 100 100
서준 100
우현 89
Name: 영어, dtype: int64
수학 영어 음악 체육 국어
서준 90 100 85 100 100
우현 80 89 95 90 80
민아 70 95 100 90 90
철수 100 80 98 77 90
수학 영어
서준 90 100
우현 80 89
민아 70 95
수학 영어
서준 90 100
우현 80 89
민아 70 95
특정 컬럼을 인덱스로 설정
df3 = df.copy()
# 이름을 추가 컬럼명 이름: 우현, 서준, 민아
df3['이름'] = ['우현','서준','민아']
print(df3)
# 특정 컬럼을 인덱스로 설정
# df.set_index(컬럼명, inplace = True)
df3.set_index('이름',inplace=True)
print(df3)
# 인덱스 초기화 df.reset_index(inplace=True)
df3.reset_index(inplace=True)
print(df3)
실행결과
수학 영어 음악 체육 이름
0 90 98 85 100 우현
1 80 89 95 90 서준
2 70 95 100 90 민아
수학 영어 음악 체육
이름
우현 90 98 85 100
서준 80 89 95 90
민아 70 95 100 90
이름 수학 영어 음악 체육
0 우현 90 98 85 100
1 서준 80 89 95 90
2 민아 70 95 100 90
요약
데이터프레임 : 2차원 배열 ( 시리즈가 열로 묶인 배열 )
인덱스 접근방법 : df.loc[인덱스명], 값이 여러개 df.loc[ [인덱스명, ...] ]
컬럼 접근 방법 : df[컬럼명]
원소 접근 방법 : df.loc[인덱스명, 컬럼명],
df.iloc[인덱스첨자, 컬럼첨자]
인덱스 생성 : df.index = [ 인덱스명, ...]
특정 컬럼을 인덱스로 : df.set_index(컬럼명, inplace=True)
인덱스 초기화 : df.reset_index(inplace=True)
인덱스 재배열 : df.reindex([인덱스명, ...])
인덱스 삭제 : df.drop(index=[인덱스명])
컬럼 삭제 : df.drop(columns=[컬럼명], axis=1)
P.S
주피터노트북에서 print()함수를 쓰다보면 한글이 넓이 차이로 줄이 잘 안맞게 나오는 경우가 많다.
이럴 때는 print()함수 대신에 display()함수를 쓰면 데이터프레임이 예쁘게 출력된다.
주피터노트북을 쓰지않겠다면 pip를 이용해서 ipython을 설치하고
pip install IPython
아래 코드를 통해 함수를 가져와서 사용할 수 있다.
from IPython.display import display
728x90
반응형
'Python 파이썬 > pandas' 카테고리의 다른 글
pandas ) 누락 데이터 처리 isnull(), dropna(), fillna(), replace() (0) | 2022.04.04 |
---|---|
pandas ) 판다스 내장 그래프 도구 (0) | 2022.03.22 |
pandas ) 판다스 데이터 속성&메소드 Pandas Data Properties&Method (0) | 2022.03.21 |
pandas ) I/O 도구 (0) | 2022.03.15 |
pandas ) 자료구조 시리즈 Series (0) | 2022.03.14 |
댓글