In [1]:
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:90% !important; }</style>"))
판다스 불러오기¶
In [2]:
# pandas 불러오기
import pandas as pd
print("pandas version: ", pd.__version__)
dict형으로 Series만들기¶
In [3]:
# 예제 1-1
# pandas 불러오기
import pandas as pd
# k:v 구조를 갖는 딕셔너리를 만들고, 변수 dict_data에 저장
dict_data = {'a': 1, 'b': 2, 'c': 3}
# 판다스 Series() 함수로 딕셔너리(dict_data)를 시리즈로 변환. 변수 sr에 저장
sr = pd.Series(dict_data)
# 변수 sr의 자료형 출력
print(type(sr))
print('\n')
# 변수 sr에 저장되어 있는 시리즈 객체를 출력
print(sr)
Series의 index,values가지고 오기¶
In [4]:
# 인덱스 배열은 변수 idx에 저장. 데이터 값 배열은 변수 val에 저장
idx = sr.index
val = sr.values
print(idx)
print('\n')
print(val)
List로 Series만들기¶
In [5]:
# 예제 1-2
# 리스트를 시리즈로 변환하여 변수 sr에 저장
list_data = ['2019-01-02', 3.14, 'ABC', 100, True]
sr = pd.Series(list_data)
print(sr)
print('\n')
In [6]:
# 인덱스 배열은 변수 idx에 저장. 데이터 값 배열은 변수 val에 저장
idx = sr.index
val = sr.values
print(idx)
print('\n')
print(val)
Series는 각각의 타입을 가지고 있는다.¶
In [3]:
s1 = pd.Series([1,2,3])
s2 = pd.Series(['1','2','3'])
s3 = pd.Series([True, False, True])
s4 = pd.Series([1.0,2.0,3.0])
s5 = pd.Series([1.0,2.0,3.0001])
s6 = pd.Series([1.0,100, '가'])
s7 = pd.Series(range(10,20,2))
print(s1)
print(s2)
print(s3)
print(s4)
print(s5)
print(s6)
print(s7)
print(type(s1), type(s2),type(s3),type(s4),type(s5), type(s6))
print(type(s6[0]),type(s6[1]),type(s6[2]))
print(s6[2])
# R의 벡터와 같이 각각의 원소에 대해서 적용된다.
print(s1 + 100)
print(s1 * 10)
tuple로 Series만들기¶
In [4]:
# 예제 1-3
import pandas as pd
# 투플을 시리즈로 변환(index 옵션에 인덱스 이름을 지정)
tup_data = ('영인', '2010-05-01', '여', True)
sr = pd.Series(tup_data, index=['이름', '생년월일', '성별', '학생여부'])
print(sr)
print('\n')
Series에서 원소 하나 선택¶
In [5]:
# 원소를 1개 선택
print(sr[0]) # sr의 1 번째 원소를 선택 (정수형 위치 인덱스를 활용)
print(sr['이름']) # '이름' 라벨을 가진 원소를 선택 (인덱스 이름을 활용)
print('\n')
Series에서 원소 여러개 선택¶
In [6]:
# 여러 개의 원소를 선택 (인덱스 리스트 활용)
print(sr[[1, 2]])
print('\n')
print(sr[['생년월일', '성별']])
print('\n')
In [7]:
# 여러 개의 원소를 선택 (인덱스 범위 지정)
print(sr[1 : 2])
print('\n')
print(sr['생년월일' : '성별'])
columns가지고 오기¶
In [8]:
# 예제 1-4
import pandas as pd
# 열이름을 key로 하고, 리스트를 value로 갖는 딕셔너리 정의(2차원 배열)
dict_data = {'c0':[1,2,3], 'c1':[4,5,6], 'c2':[7,8,9], 'c3':[10,11,12], 'c4':[13,14,15]}
# 판다스 DataFrame() 함수로 딕셔너리를 데이터프레임으로 변환. 변수 df에 저장.
df = pd.DataFrame(dict_data)
# df의 자료형 출력
print(type(df))
print('\n')
# 변수 df에 저장되어 있는 데이터프레임 객체를 출력
print(df)
print(df.columns)
Dataframe만들때 index,columns지정하는 방법¶
In [9]:
# 예제 1-5
import pandas as pd
# 행 인덱스/열 이름 지정하여, 데이터프레임 만들기
df = pd.DataFrame([[15, '남', '덕영중'], [17, '여', '수리중']],
index=['준서', '예은'],
columns=['나이', '성별', '학교'])
# 행 인덱스, 열 이름 확인하기
print(df) #데이터프레임
print('\n')
print(df.index) #행 인덱스
print('\n')
print(df.columns) #열 이름
print('\n')
행, 열의 이름을 변경하기¶
In [10]:
# 행 인덱스, 열 이름 변경하기
df.index=['학생1', '학생2']
df.columns=['연령', '남녀', '소속']
print(df) #데이터프레임
print('\n')
print(df.index) #행 인덱스
print('\n')
print(df.columns) #열 이름
inplace와 rename함수¶
In [11]:
# 예제 1-6
import pandas as pd
# 행 인덱스/열 이름 지정하여, 데이터프레임 만들기
df = pd.DataFrame([[15, '남', '덕영중'], [17, '여', '수리중']],
index=['준서', '예은'],
columns=['나이', '성별', '학교'])
# 데이터프레임 df 출력
print(df)
print("\n")
# 열 이름 중, '나이'를 '연령'으로, '성별'을 '남녀'로, '학교'를 '소속'으로 바꾸기
# 특정 값만을 바꿀때 사용하고 dict형으로 값을 준다. old column : new column으로 설정한다.
# inplace의 값에 따라 inplace가 True이면 데이터 자체 값을 변화
# inplace가 False이면 변경된 dataframe을 return한다.
a=df.rename(columns={'나이':'연령', '성별':'남녀', '학교':'소속'}, inplace=True)
# df의 행 인덱스 중에서, '준서'를 '학생1'로, '예은'을 '학생2'로 바꾸기
df.rename(index={'준서':'학생1', '예은':'학생2' }, inplace=True)
# df 출력(변경 후)
print(df)
print(a)
Dataframe
복사와 행, 열 삭제¶
In [12]:
# 예제 1-7
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'수학' : [ 90, 80, 70], '영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100], '체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data, index=['서준', '우현', '인아'])
print(df)
print('\n')
# 데이터프레임 df를 복제하여 변수 df2에 저장. df2의 1개 행(row)을 삭제
df2 = df.copy()
df2.drop('우현', inplace=True)
print(df2)
print('\n')
# 데이터프레임 df를 복제하여 변수 df3에 저장. df3의 2개 행(row)을 삭제
# axis=0은 행삭제, axis=1은 열삭제를 의미한다.
df3 = df.copy()
df3.drop(['우현', '인아'], axis=0, inplace=True)
print(df3)
In [13]:
# 예제 1-8
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'수학' : [ 90, 80, 70], '영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100], '체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data, index=['서준', '우현', '인아'])
print(df)
print('\n')
# 데이터프레임 df를 복제하여 변수 df4에 저장. df4의 1개 열(column)을 삭제
df4 = df.copy()
df4.drop('수학', axis=1, inplace=True)
print(df4)
print('\n')
# 데이터프레임 df를 복제하여 변수 df5에 저장. df5의 2개 열(column)을 삭제
df5 = df.copy()
df5.drop(['영어', '음악'], axis=1, inplace=True)
print(df5)
행, 열 조회(loc
, iloc
)¶
In [14]:
# 예제 1-9
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'수학' : [ 90, 80, 70], '영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100], '체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data, index=['서준', '우현', '인아'])
print(df) # 데이터프레임 출력
print('\n')
# 행 인덱스를 사용하여 행 1개를 선택
label1 = df.loc['서준'] # loc 인덱서 활용
position1 = df.iloc[0] # iloc 인덱서 활용
print(label1)
print('\n')
print(position1)
print('\n')
2개 이상의 행 선택법¶
In [15]:
# 행 인덱스를 사용하여 2개 이상의 행 선택
label2 = df.loc[['서준', '우현']]
position2 = df.iloc[[0, 1]]
print(label2)
print('\n')
print(position2)
print('\n')
In [16]:
# 행 인덱스의 범위를 지정하여 행 선택
label3 = df.loc['서준':'우현']
position3 = df.iloc[0:1]
print(label3)
print('\n')
print(position3)
컬럼접근 []
와 .
방식¶
In [17]:
# 예제 1-10
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'이름' : [ '서준', '우현', '인아'],
'수학' : [ 90, 80, 70],
'영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100],
'체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
print(df)
print(type(df))
print('\n')
# '수학' 점수 데이터만 선택. 변수 math1에 저장
math1 = df['수학']
print(math1)
print(type(math1))
print('\n')
# '영어' 점수 데이터만 선택. 변수 english에 저장
english = df.영어
print(english)
print(type(english))
print('\n')
Dataframe
형식을 그대로 유지하면서 column가지고 오기.¶
In [18]:
# '음악', '체육' 점수 데이터를 선택. 변수 music_gym 에 저장
music_gym = df[['음악', '체육']]
print(music_gym)
print(type(music_gym))
print('\n')
# '수학' 점수 데이터만 선택. 변수 math2에 저장
math2 = df[['수학']]
print(math2)
print(type(math2))
슬라이싱의 step
적용.¶
In [19]:
print(df.iloc[::2])
In [20]:
print(df.iloc[:3:2])
In [21]:
print(df.iloc[::-1])
컬럼을 index로 사용하기(set_index
)¶
In [15]:
# 예제 1-11
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'이름' : [ '서준', '우현', '인아'],
'수학' : [ 90, 80, 70],
'영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100],
'체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
# '이름' 열을 새로운 인덱스로 지정하고, df 객체에 변경사항 반영
# 특정 컬럼을 인덱스로 사용하는 방법 set_index
df.set_index('이름', inplace=True)
print(df)
print('\n')
여러 행, 열 조회하기.¶
In [17]:
# 데이터프레임 df의 특정 원소 1개 선택 ('서준'의 '음악' 점수)
a = df.loc['서준', '음악']
print(a)
b = df.iloc[0, 2]
print(b)
print('\n')
In [18]:
# 데이터프레임 df의 특정 원소 2개 이상 선택 ('서준'의 '음악', '체육' 점수)
c = df.loc['서준', ['음악', '체육']]
print(c)
d = df.iloc[0, [2, 3]]
print(d)
e = df.loc['서준', '음악':'체육']
print(e)
f = df.iloc[0, 2:]
print(f)
print('\n')
In [19]:
# df의 2개 이상의 행과 열로부터 원소 선택 ('서준', '우현'의 '음악', '체육' 점수)
g = df.loc[['서준', '우현'], ['음악', '체육']]
print(g)
h = df.iloc[[0, 1], [2, 3]]
print(h)
i = df.loc['서준':'우현', '음악':'체육']
print(i)
j = df.iloc[0:2, 2:]
print(j)
Dataframe
값 수정하기.¶
In [20]:
# 예제 1-12
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'이름' : [ '서준', '우현', '인아'],
'수학' : [ 90, 80, 70],
'영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100],
'체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
# 데이터프레임 df에 '국어' 점수 열(column)을 추가. 데이터 값은 80 지정
df['국어'] = 80
print(df)
print(df.국어)
df.국어 = 100
print(df)
df.국어 = [100, 90, 80]
print(df)
df['사회'] = 70 # 처음 추가하는 열이름인 경우에는 . 사용 못함
print(df)
행 추가¶
In [16]:
# 예제 1-13
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'이름' : ['서준', '우현', '인아'],
'수학' : [ 90, 80, 70],
'영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100],
'체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
# 새로운 행(row)을 추가 - 같은 원소 값을 입력
df.loc[3] = 0
print(df)
print('\n')
# 새로운 행(row)을 추가 - 원소 값 여러 개의 배열 입력
df.loc[4] = ['동규', 90, 80, 70, 60]
print(df)
print('\n')
# 새로운 행(row)을 추가 - 기존 행을 복사
df.loc['행5'] = df.loc[3]
print(df)
In [23]:
# 예제 1-14
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'이름' : [ '서준', '우현', '인아'],
'수학' : [ 90, 80, 70],
'영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100],
'체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
# '이름' 열을 새로운 인덱스로 지정하고, df 객체에 변경사항 반영
df.set_index('이름', inplace=True)
print(df)
print('\n')
# 데이터프레임 df의 특정 원소를 변경하는 방법: '서준'의 '체육' 점수
df.iloc[0][3] = 80
print(df)
print('\n')
df.loc['서준']['체육'] = 90
print(df)
print('\n')
df.loc['서준', '체육'] = 100
print(df)
print('\n')
In [24]:
# 데이터프레임 df의 원소 여러 개를 변경하는 방법: '서준'의 '음악', '체육' 점수
df.loc['서준', ['음악', '체육']] = 50
print(df)
print('\n')
df.loc['서준', ['음악', '체육']] = 100, 50
print(df)
전치행렬 구하기(transpose
)¶
In [25]:
# 예제 1-15
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'이름' : [ '서준', '우현', '인아'],
'수학' : [ 90, 80, 70],
'영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100],
'체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
# 데이터프레임 df를 전치하기 (메소드 활용)
df = df.transpose()
print(df)
print('\n')
# 데이터프레임 df를 다시 전치하기 (클래스 속성 활용)
df = df.T
print(df)
In [13]:
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'name' : [ 'dooly', 'ddoch', 'dounar'],
'math' : [ 90, 80, 70],
'eng' : [ 98, 89, 95],
'music' : [ 85, 95, 100],
'exer' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
df.set_index('name', inplace=True)
print(df)
df.plot()
print('\n')
# 데이터프레임 df를 전치하기 (메소드 활용)
df = df.transpose()
print(df)
df.plot()
print('\n')
# 데이터프레임 df를 다시 전치하기 (클래스 속성 활용)
df = df.T
print(df)
In [1]:
# 예제 1-16
import pandas as pd
# DataFrame() 함수로 데이터프레임 변환. 변수 df에 저장
exam_data = {'이름' : [ '서준', '우현', '인아'],
'수학' : [ 90, 80, 70],
'영어' : [ 98, 89, 95],
'음악' : [ 85, 95, 100],
'체육' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
# 특정 열(column)을 데이터프레임의 행 인덱스(index)로 설정
ndf = df.set_index(['이름'])
print(ndf)
print('\n')
ndf2 = ndf.set_index('음악')
print(ndf2)
print('\n')
ndf3 = ndf.set_index(['수학', '음악'])
print(ndf3)
reindex¶
In [ ]:
# 예제 1-17
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]}
# 딕셔서리를 데이터프레임으로 변환. 인덱스를 [r0, r1, r2]로 지정
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print(df)
print('\n')
# 인덱스를 [r0, r1, r2, r3, r4]로 재지정
new_index = ['r0', 'r1', 'r2', 'r3', 'r4']
ndf = df.reindex(new_index)
print(ndf)
print('\n')
# reindex로 발생한 NaN값을 숫자 0으로 채우기
new_index = ['r0', 'r1', 'r2', 'r3', 'r4']
ndf2 = df.reindex(new_index, fill_value=0)
print(ndf2)
reset_index¶
In [2]:
# 예제 1-18
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]}
# 딕셔서리를 데이터프레임으로 변환. 인덱스를 [r0, r1, r2]로 지정
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print(df)
print('\n')
# 행 인덱스를 정수형으로 초기화
ndf = df.reset_index()
print(ndf)
정렬¶
In [3]:
# 예제 1-19
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]}
# 딕셔서리를 데이터프레임으로 변환. 인덱스를 [r0, r1, r2]로 지정
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print(df)
print('\n')
# 내림차순으로 행 인덱스 정렬
ndf = df.sort_index(ascending=False)
print(ndf)
In [4]:
# 예제 1-20
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]}
# 딕셔서리를 데이터프레임으로 변환. 인덱스를 [r0, r1, r2]로 지정
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print(df)
print('\n')
# c1 열을 기준으로 내림차순 정렬
ndf = df.sort_values(by='c1', ascending=False)
print(ndf)
Series
의 연산¶
In [5]:
# 예제 1-21
# 라이브러리 불러오기
import pandas as pd
# 딕셔너리 데이터로 판다스 시리즈 만들기
student1 = pd.Series({'국어':100, '영어':80, '수학':90})
print(student1)
print('\n')
# 학생의 과목별 점수를 200으로 나누기
percentage = student1 / 200
print(percentage)
print('\n')
print(type(percentage))
In [6]:
# 예제 1-22
# 라이브러리 불러오기
import pandas as pd
# 딕셔너리 데이터로 판다스 시리즈 만들기
student1 = pd.Series({'국어':100, '영어':80, '수학':90})
student2 = pd.Series({'수학':80, '국어':90, '영어':80})
print(student1)
print('\n')
print(student2)
print('\n')
# 두 학생의 과목별 점수로 사칙연산 수행
addition = student1 + student2 #덧셈
subtraction = student1 - student2 #뺄셈
multiplication = student1 * student2 #곱셈
division = student1 / student2 #나눗셈
print(division)
print(type(division))
print('\n')
result = pd.DataFrame([addition, subtraction, multiplication],
index=['덧셈', '뺄셈', '곱셈'])
print(result)
# 사칙연산 결과를 데이터프레임으로 합치기 (시리즈 -> 데이터프레임)
result = pd.DataFrame([addition, subtraction, multiplication, division],
index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(result)
값이 없거나 Nan인 경우 사칙연산¶
In [7]:
# 예제 1-23
# 라이브러리 불러오기
import pandas as pd
import numpy as np
# 딕셔너리 데이터로 판다스 시리즈 만들기
# Nan사용하려면 np.nan을 사용해야 한다.
student1 = pd.Series({'국어':np.nan, '영어':80, '수학':90})
student2 = pd.Series({'수학':80, '국어':90})
print(student1)
print('\n')
print(student2)
print('\n')
# 두 학생의 과목별 점수로 사칙연산 수행 (시리즈 vs. 시리즈)
addition = student1 + student2 #덧셈
subtraction = student1 - student2 #뺄셈
multiplication = student1 * student2 #곱셈
division = student1 / student2 #나눗셈
print(type(division))
print('\n')
# 사칙연산 결과를 데이터프레임으로 합치기 (시리즈 -> 데이터프레임)
result = pd.DataFrame([addition, subtraction, multiplication, division],
index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(result)
연산 메소드, fill_value(Nan을 대신해서 넣을 값)¶
In [8]:
# 예제 1-24
# 라이브러리 불러오기
import pandas as pd
import numpy as np
# 딕셔너리 데이터로 판다스 시리즈 만들기
student1 = pd.Series({'국어':np.nan, '영어':80, '수학':90})
student2 = pd.Series({'수학':80, '국어':90})
print(student1)
print('\n')
print(student2)
print('\n')
# 두 학생의 과목별 점수로 사칙연산 수행 (연산 메소드 사용)
sr_add = student1.add(student2, fill_value=0) #덧셈
sr_sub = student1.sub(student2, fill_value=0) #뺄셈
sr_mul = student1.mul(student2, fill_value=0) #곱셈
sr_div = student1.div(student2, fill_value=0) #나눗셈
# 사칙연산 결과를 데이터프레임으로 합치기 (시리즈 -> 데이터프레임)
result = pd.DataFrame([sr_add, sr_sub, sr_mul, sr_div],
index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(result)
Dateframe
의 연산¶
In [9]:
# 예제 1-25
# 라이브러리 불러오기
import pandas as pd
import seaborn as sns
# titanic 데이터셋에서 age, fare 2개 열을 선택하여 데이터프레임 만들기
titanic = sns.load_dataset('titanic')
df = titanic.loc[:, ['age','fare']]
print(df.head()) #첫 5행만 표시
print('\n')
print(type(df))
print('\n')
# 데이터프레임에 숫자 10 더하기
addition = df + 10
print(addition.head()) #첫 5행만 표시
print('\n')
print(type(addition))
Dataframe
끼리의 연산¶
In [10]:
# 예제 1-26
# 라이브러리 불러오기
import pandas as pd
import seaborn as sns
# titanic 데이터셋에서 age, fare 2개 열을 선택하여 데이터프레임 만들기
titanic = sns.load_dataset('titanic')
df = titanic.loc[:, ['age','fare']]
print(df.tail()) #마지막 5행을 표시
print('\n')
print(type(df))
print('\n')
# 데이터프레임에 숫자 10 더하기
addition = df + 10
print(addition.tail()) #마지막 5행을 표시
print('\n')
print(type(addition))
print('\n')
# 데이터프레임끼리 연산하기 (additon - df)
subtraction = addition - df
print(subtraction.tail()) #마지막 5행을 표시
print('\n')
print(type(subtraction))
함수의 설명 보기¶
In [11]:
len?
In [12]:
help(len)
'데이터 분석 > python_analysis' 카테고리의 다른 글
jupyter notebook 올리기 예시 (0) | 2020.11.25 |
---|---|
쥬피터 올리기 (0) | 2020.11.25 |