매일 배운 것을 정리하며 기록합니다.
Pandas에 입문하여 자료구조, 인덱스 활용, 산술연산을 공부하였습니다.
import pandas as pd
dict_data = {'a': 1, 'b': 2, 'c': 3}
sr = pd.Series(dict_data)
print(type(sr)) # <class 'pandas.core.series.Series'>
print('\n')
print(sr)
# a 1
# b 2
# c 3
# dtype: int64
import pandas as pd
dict_data = {'c0': [1, 2, 3], 'c1': [4, 5, 6], 'c2': [
7, 8, 9], 'c3': [10, 11, 12], 'c4': [13, 14, 15]}
df = pd.DataFrame(dict_data)
print(type(df))
print('\n')
print(df)
# <class 'pandas.core.frame.DataFrame'>
# c0 c1 c2 c3 c4
# 0 1 4 7 10 13
# 1 2 5 8 11 14
# 2 3 6 9 12 15
# pandas.DataFrame(2차원 배열, index=행 인덱스 배열, columns=열 이름 배열)
import pandas as pd
df = pd.DataFrame([['돌솥비빔밥', '짜장면', '스테이크'], ['김치볶음밥', '짬뽕', '피자']], index=[
'맛있는 순위 1', '맛있는 순위 2'], columns=['한식', '중식', '양식'])
print(df)
# 한식 중식 양식
# 맛있는 순위 1 돌솥비빔밥 짜장면 스테이크
# 맛있는 순위 2 김치볶음밥 짬뽕 피자
데이터프레임의 행 인덱스와 열 이름 객체에 새로운 배열을 할당
- DataFrame 객체.index = 새로운 행 인덱스 배열
- DataFrame 객체.columns = 새로운 열 이름 배열
rename() 메서드를 사용하면 새로운 데이터프레임 객체를 반환받을 수 있음
- DataFrame 객체.rename(index={기존 인덱스: 새 인덱스,...})
- DataFrame 객체.rename(columns={기존 이름: 새 이름,...})
DataFrame 객체.drop(행 인덱스 또는 배열, axis=0)
DataFrame 객체.drop(열 이름 또는 배열, axis=1)
DataFrame 객체.loc['1번 행 이름']
DataFrame 객체.loc['1번 행 이름':'3번 행 이름']
DataFrame 객체.iloc[0]
DataFrame 객체.iloc[0:3]
DataFrame 객체["열 이름"] 또는 DataFrame 객체. 열 이름
DataFrame 객체[ [ 열1, 열2, ...열n] ]
DataFrame 객체.iloc[ 시작 인덱스 : 끝 인덱스 : 슬라이싱 간격 ]
DataFrame 객체.iloc[ : : -1 ] # 모든 행을 역순 정렬
1개의 행과 2개 이상의 열을 선택하거나, 2개 이상의 행과 1개의 열을 선택하는 경우 시리즈 객체 반환
2개 이상의 행과 2개 이상의 열을 선택하면 데이터프레임 객체 반환
인덱스 이름
DataFrame 객체.loc[행 인덱스, 열 이름]
DataFrame 객체.iloc[행 번호, 열 번호]
import pandas as pd
exam_data = {'이름': ['김코딩', '박해커', '최고수'],
'언어': ['JS', 'Python', 'C'],
'경력': ['1년', '2년', '3년'],
'취미': ['걷기', '독서', '등산'],
'특기': ['양궁', '축구', '노래']}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
df['특기'] = '코딩'
print(df)
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 양궁
# 1 박해커 Python 2년 독서 축구
# 2 최고수 C 3년 등산 노래
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 코딩
# 1 박해커 Python 2년 독서 코딩
# 2 최고수 C 3년 등산 코딩
import pandas as pd
exam_data = {'이름': ['김코딩', '박해커', '최고수'],
'언어': ['JS', 'Python', 'C'],
'경력': ['1년', '2년', '3년'],
'취미': ['걷기', '독서', '등산'],
'특기': ['양궁', '축구', '노래']}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
df.loc[3] = '행 추가'
print(df)
print('\n')
df.loc[4] = ['이박사', 'Java', '20년', '알고리즘 풀기', '요리']
print(df)
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 양궁
# 1 박해커 Python 2년 독서 축구
# 2 최고수 C 3년 등산 노래
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 양궁
# 1 박해커 Python 2년 독서 축구
# 2 최고수 C 3년 등산 노래
# 3 행 추가 행 추가 행 추가 행 추가 행 추가
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 양궁
# 1 박해커 Python 2년 독서 축구
# 2 최고수 C 3년 등산 노래
# 3 행 추가 행 추가 행 추가 행 추가 행 추가
# 4 이박사 Java 20년 알고리즘 풀기 요리
import pandas as pd
exam_data = {'이름': ['김코딩', '박해커', '최고수'],
'언어': ['JS', 'Python', 'C'],
'경력': ['1년', '2년', '3년'],
'취미': ['걷기', '독서', '등산'],
'특기': ['양궁', '축구', '노래']}
df = pd.DataFrame(exam_data)
df.set_index('이름', inplace=True)
print(df)
print('\n')
df.iloc[0][2] = '달리기'
print(df)
print('\n')
df.loc['박해커']['취미'] = '퍼즐'
print(df)
print('\n')
df.loc['박해커', '취미'] = '낚시'
print(df)
# 언어 경력 취미 특기
# 이름
# 김코딩 JS 1년 걷기 양궁
# 박해커 Python 2년 독서 축구
# 최고수 C 3년 등산 노래
# 언어 경력 취미 특기
# 이름
# 김코딩 JS 1년 달리기 양궁
# 박해커 Python 2년 독서 축구
# 최고수 C 3년 등산 노래
# 언어 경력 취미 특기
# 이름
# 김코딩 JS 1년 달리기 양궁
# 박해커 Python 2년 퍼즐 축구
# 최고수 C 3년 등산 노래
# 언어 경력 취미 특기
# 이름
# 김코딩 JS 1년 달리기 양궁
# 박해커 Python 2년 낚시 축구
# 최고수 C 3년 등산 노래
import pandas as pd
exam_data = {'이름': ['김코딩', '박해커', '최고수'],
'언어': ['JS', 'Python', 'C'],
'경력': ['1년', '2년', '3년'],
'취미': ['걷기', '독서', '등산'],
'특기': ['양궁', '축구', '노래']}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
df.transpose()
print(df)
print('\n')
df.T
print(df)
print('\n')
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 양궁
# 1 박해커 Python 2년 독서 축구
# 2 최고수 C 3년 등산 노래
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 양궁
# 1 박해커 Python 2년 독서 축구
# 2 최고수 C 3년 등산 노래
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 양궁
# 1 박해커 Python 2년 독서 축구
# 2 최고수 C 3년 등산 노래
import pandas as pd
exam_data = {'이름': ['김코딩', '박해커', '최고수'],
'언어': ['JS', 'Python', 'C'],
'경력': ['1년', '2년', '3년'],
'취미': ['걷기', '독서', '등산'],
'특기': ['양궁', '축구', '노래']}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
ndf = df.set_index(['이름'])
print(ndf)
print('\n')
ndf2 = df.set_index(['언어'])
print(ndf2)
print('\n')
# 이름 언어 경력 취미 특기
# 0 김코딩 JS 1년 걷기 양궁
# 1 박해커 Python 2년 독서 축구
# 2 최고수 C 3년 등산 노래
# 언어 경력 취미 특기
# 이름
# 김코딩 JS 1년 걷기 양궁
# 박해커 Python 2년 독서 축구
# 최고수 C 3년 등산 노래
# 이름 경력 취미 특기
# 언어
# JS 김코딩 1년 걷기 양궁
# Python 박해커 2년 독서 축구
# C 최고수 3년 등산 노래
import pandas as pd
dict_data = {'c': [1, 2, 3], 'c1': [4, 5, 6], 'c2': [
7, 8, 9, ], 'c3': [10, 11, 12], 'c4': [13, 14, 15]}
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print(df)
print('\n')
# c c1 c2 c3 c4
# r0 1 4 7 10 13
# r1 2 5 8 11 14
# r2 3 6 9 12 15
new_index = ['r0', 'r1', 'r2', 'r3', 'r4']
ndf = df.reindex(new_index)
print(ndf)
print('\n')
# c c1 c2 c3 c4
# r0 1.0 4.0 7.0 10.0 13.0
# r1 2.0 5.0 8.0 11.0 14.0
# r2 3.0 6.0 9.0 12.0 15.0f
# r3 NaN NaN NaN NaN NaN
# r4 NaN NaN NaN NaN NaN
ndf2 = df.reindex(new_index, fill_value=0)
print(ndf2)
# c c1 c2 c3 c4
# r0 1 4 7 10 13
# r1 2 5 8 11 14
# r2 3 6 9 12 15
# r3 0 0 0 0 0
# r4 0 0 0 0 0
import pandas as pd
dict_data = {'c': [1, 2, 3], 'c1': [4, 5, 6], 'c2': [
7, 8, 9, ], 'c3': [10, 11, 12], 'c4': [13, 14, 15]}
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print(df)
print('\n')
# c c1 c2 c3 c4
# r0 1 4 7 10 13
# r1 2 5 8 11 14
# r2 3 6 9 12 15
ndf = df.reset_index()
print(ndf)
# index c c1 c2 c3 c4
# 0 r0 1 4 7 10 13
# 1 r1 2 5 8 11 14
# 2 r2 3 6 9 12 15
import pandas as pd
dict_data = {'c': [1, 2, 3], 'c1': [4, 5, 6], 'c2': [
7, 8, 9, ], 'c3': [10, 11, 12], 'c4': [13, 14, 15]}
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print(df)
print('\n')
# c c1 c2 c3 c4
# r0 1 4 7 10 13
# r1 2 5 8 11 14
# r2 3 6 9 12 15
ndf = df.sort_index(ascending=False)
print(ndf)
# c c1 c2 c3 c4
# r2 3 6 9 12 15
# r1 2 5 8 11 14
# r0 1 4 7 10 13
판다스 객체의 산술연산은 내부적으로 3단계 프로세스를 거침
1.행/열 인덱스를 기준으로 모든 원소를 정렬
2.동일한 위치에 있는 원소끼리 일대일 대응
3.일대일 대응 되는 원소끼리 연산 처리, 이때 대응되는 원소 없으면 NaN으로 처리
시리즈와 숫자 연산: Series + 연산자(+, -, *, /) + 숫자
시리즈와 시리즈: Series1 + 연산자(+, -, *, /) + Series2
연산 메소드(add, sub, mul, div): ex) Series.add(series2)
객체 사이에 공통 인덱스가 없거나 NaN이 포함된 경우 연산 결과는 NaN으로 반환,
이떄 fill_value옵션을 사용하면 방지할 수 있음
ex) Series.sub(series2, fill_value=0)
데이터프레임은 여러 시리즈가 모인 것이므로 동일하며 시리즈 연산의 확장으로 이해하는 것이 좋음
Reference : 오승환, 『파이썬 머신러닝 판다스 데이터 분석』, 정보문화사 (2019), p002-055.