반응형
In [2]:
# 판다스 불러오기
import pandas as pd
# key:value 쌍으로 딕셔너리 만들고, 변수 dict_data에 저장
dict_data = {'a':1,'b':2,'c':3}
# series()함수로 dictionary를 series로 변환
sr = pd.Series(dict_data)
print(type(sr))
print('\n')
print(sr)
<class 'pandas.core.series.Series'>
a 1
b 2
c 3
dtype: int64
In [4]:
list_data = ['2019-01-02', 3.14,'abc',100,True]
sr = pd.Series(list_data)
print(sr)
0 2019-01-02
1 3.14
2 abc
3 100
4 True
dtype: object
인덱스 구조 (객체.index / 객체.values)¶
In [5]:
idx = sr.index
val = sr.values
print(idx)
print("\n")
print(val)
RangeIndex(start=0, stop=5, step=1)
['2019-01-02' 3.14 'abc' 100 True]
원소 선택¶
In [3]:
tup_data = ('영인','2010-05-01','여',True)
# Series() 함수의 index 옵션에 인덱스 이름을 직접 전달
sr = pd.Series(tup_data, index=['이름','생년원일','성별','학생여부'])
print(sr)
이름 영인
생년원일 2010-05-01
성별 여
학생여부 True
dtype: object
In [7]:
print(sr[0]) # 정수형 인덱스
print(sr['이름']) # 인덱스 이름
영인
영인
In [8]:
print(sr[[1,2]])
print("\n")
print(sr[['생년원일','성별']])
생년원일 2010-05-01
성별 여
dtype: object
생년원일 2010-05-01
성별 여
dtype: object
In [9]:
print(sr[1:2])
print('\n')
print(sr['생년원일':'성별'])
생년원일 2010-05-01
dtype: object
생년원일 2010-05-01
성별 여
dtype: object
In [10]:
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
행 인덱스 / 열 이름 설정¶
In [13]:
df = pd.DataFrame([[15,'남','덕영중'],[17,'여','수리중']],index=['준서','예은'], columns=['나이','성별','학교'])
print(df)
print('\n')
print(df.index)
print('\n')
print(df.columns)
나이 성별 학교
준서 15 남 덕영중
예은 17 여 수리중
Index(['준서', '예은'], dtype='object')
Index(['나이', '성별', '학교'], dtype='object')
In [14]:
df.index = ['학생1','학생2']
df.columns = ['연령','남녀','소속']
print(df)
연령 남녀 소속
학생1 15 남 덕영중
학생2 17 여 수리중
rename() : 행 인덱스 또는 열 이름의 일부를 선택하여 변경 할 수 있다.¶
In [17]:
# inplace=True 옵션을 통해 원본객체를 변경 / x -> 원본객체를 직접 수정하는 것이 아니라 새로운 데이터프레임 객체를 반환
df.rename(columns={'연령':'나이','남녀':'성별','소속':'학교'},inplace = True)
df.rename(index={'학생1':'준서','학생2':'예은'}, inplace=True)
print(df)
나이 성별 학교
준서 15 남 덕영중
예은 17 여 수리중
In [4]:
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 = df.copy()
df2.drop('우현', inplace=True)
print(df2)
print('\n')
df3 = df.copy()
df3.drop(['우현','인아'],axis=0,inplace=True)
print(df3)
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
인아 70 95 100 90
수학 영어 음악 체육
서준 90 98 85 100
인아 70 95 100 90
수학 영어 음악 체육
서준 90 98 85 100
In [26]:
df4 = df.copy()
df4.drop('수학',axis=1,inplace=True)
print(df4)
print('\n')
df5 = df.copy()
df5.drop(['영어','음악'],axis=1, inplace=True)
print(df5)
영어 음악 체육
서준 98 85 100
우현 89 95 90
인아 95 100 90
수학 체육
서준 90 100
우현 80 90
인아 70 90
df2 = df[:] , df2 = df.copy() :데이터프레임 복제¶
In [5]:
print(df)
print('\n')
label1 = df.loc['서준']
position1 = df.iloc[0]
print(label1)
print('\n')
print(position1)
수학 영어 음악 체육
서준 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
In [30]:
label2 = df.loc[['서준','우현']]
position2 = df.iloc[[0,1]]
print(label2)
print('\n')
print(position2)
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
In [31]:
label3 = df.loc['서준':'우현']
position3 = df.iloc[0:1]
print(label3)
print('\n')
print(position3)
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
수학 영어 음악 체육
서준 90 98 85 100
In [6]:
print(df,'\n')
math1 = df['수학']
print(math1)
print('\n')
english = df.영어
print(english)
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
인아 70 95 100 90
서준 90
우현 80
인아 70
Name: 수학, dtype: int64
서준 98
우현 89
인아 95
Name: 영어, dtype: int64
In [33]:
music_gym = df[['음악','체육']]
print(music_gym)
print(type(music_gym))
print('\n')
math2 = df[['수학']]
print(math2)
print(type(math2))
음악 체육
서준 85 100
우현 95 90
인아 100 90
<class 'pandas.core.frame.DataFrame'>
수학
서준 90
우현 80
인아 70
<class 'pandas.core.frame.DataFrame'>
In [7]:
print(df,'\n')
a = df.loc['서준','음악']
print(a)
b = df.iloc[0,2]
print(b)
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
인아 70 95 100 90
85
85
In [38]:
c = df.loc['서준',['음악','체육']]
print(c)
d = df.iloc[0,[2,3]]
print(d)
e = df.loc['서준','음악':'체육']
print(e)
음악 85
체육 100
Name: 서준, dtype: int64
음악 85
체육 100
Name: 서준, dtype: int64
음악 85
체육 100
Name: 서준, dtype: int64
In [39]:
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)
음악 체육
서준 85 100
우현 95 90
음악 체육
서준 85 100
우현 95 90
음악 체육
서준 85 100
우현 95 90
음악 체육
서준 85 100
우현 95 90
열 추가¶
In [9]:
exam_data = {'이름':['서준','우현','인아'],'수학':[90,80,70],'영어':[98,89,95],'음악':[85,95,100],'체육':[100,90,90]}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
df1 = df.copy()
df1['국어'] = 80
print(df1)
이름 수학 영어 음악 체육
0 서준 90 98 85 100
1 우현 80 89 95 90
2 인아 70 95 100 90
이름 수학 영어 음악 체육 국어
0 서준 90 98 85 100 80
1 우현 80 89 95 90 80
2 인아 70 95 100 90 80
행 추가¶
In [10]:
print(df)
print('\n')
df.loc[3]=0
print(df)
print('\n')
df.loc[4] = ['동규',90,80,70,60]
print(df)
print('\n')
# 인덱스 3인 행을 복사
df.loc['행5'] = df.loc[3]
print(df)
이름 수학 영어 음악 체육
0 서준 90 98 85 100
1 우현 80 89 95 90
2 인아 70 95 100 90
이름 수학 영어 음악 체육
0 서준 90 98 85 100
1 우현 80 89 95 90
2 인아 70 95 100 90
3 0 0 0 0 0
이름 수학 영어 음악 체육
0 서준 90 98 85 100
1 우현 80 89 95 90
2 인아 70 95 100 90
3 0 0 0 0 0
4 동규 90 80 70 60
이름 수학 영어 음악 체육
0 서준 90 98 85 100
1 우현 80 89 95 90
2 인아 70 95 100 90
3 0 0 0 0 0
4 동규 90 80 70 60
행5 0 0 0 0 0
In [45]:
exam_data = {'이름':['서준','우현','인아'],'수학':[90,80,70],'영어':[98,89,95],'음악':[85,95,100],'체육':[100,90,90]}
df = pd.DataFrame(exam_data)
df.set_index('이름',inplace=True)
print(df)
print('\n')
df.iloc[0][3] = 80
print(df)
print('\n')
df.loc['서준']['체육'] = 90
print(df)
print('\n')
df.loc['서준','체육'] = 100
print(df)
수학 영어 음악 체육
이름
서준 90 98 85 100
우현 80 89 95 90
인아 70 95 100 90
수학 영어 음악 체육
이름
서준 90 98 85 80
우현 80 89 95 90
인아 70 95 100 90
수학 영어 음악 체육
이름
서준 90 98 85 90
우현 80 89 95 90
인아 70 95 100 90
수학 영어 음악 체육
이름
서준 90 98 85 100
우현 80 89 95 90
인아 70 95 100 90
In [46]:
df.loc['서준',['음악','체육']] = 50
print(df)
print('\n')
df.loc['서준',['음악','체육']] = 100, 50
print(df)
수학 영어 음악 체육
이름
서준 90 98 50 50
우현 80 89 95 90
인아 70 95 100 90
수학 영어 음악 체육
이름
서준 90 98 100 50
우현 80 89 95 90
인아 70 95 100 90
행, 열 위치 바꾸기 / df = df.T or df = df.transpose()¶
In [47]:
print(df)
print('\n')
df = df.transpose()
print(df)
print('\n')
df = df.T
print(df)
print('\n')
수학 영어 음악 체육
이름
서준 90 98 100 50
우현 80 89 95 90
인아 70 95 100 90
이름 서준 우현 인아
수학 90 80 70
영어 98 89 95
음악 100 95 100
체육 50 90 90
수학 영어 음악 체육
이름
서준 90 98 100 50
우현 80 89 95 90
인아 70 95 100 90
인덱스 활용¶
In [3]:
import pandas as pd
exam_data = {'이름':['서준','우현','인아'],
'수학': [90,80,70],
'영어': [98,89,95],
'음악': [85,95,100],
'체육': [100,90,90]}
df = pd.DataFrame(exam_data)
print(df)
print('\n')
# 특정 열을 데이터프레임의 행 인덱스로 설정
ndf = df.set_index(['이름'])
print(ndf)
print('\n')
ndf2 = ndf.set_index('음악')
print(ndf2)
print('\n')
ndf3 = ndf.set_index(['수학','음악'])
print(ndf3)
이름 수학 영어 음악 체육
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
수학 영어 체육
음악
85 90 98 100
95 80 89 90
100 70 95 90
영어 체육
수학 음악
90 85 98 100
80 95 89 90
70 100 95 90
행 인덱스 재배열¶
In [11]:
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, index=['r0','r1','r2'])
print(df)
print('\n')
new_index = ['r0','r1','r2','r3','r4']
# 기존 데이터프레임에 존재하지 않는 행 인덱스가 새롭게 추가되는 경우 그 행의 데이터 값은 NAN 값이 입력된다.
ndf = df.reindex(new_index)
print(ndf)
print('\n')
# NAN 대신 유효한 값으로 채우려면 fill_value 옵션에 원하는 값을 넣어준다.
ndf2 = df.reindex(new_index, fill_value=0)
print(ndf2)
c0 c1 c2 c3 c4
r0 1 4 7 10 13
r1 2 5 8 11 14
r2 3 6 9 12 15
c0 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.0
r3 NaN NaN NaN NaN NaN
r4 NaN NaN NaN NaN NaN
c0 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
행 인덱스 초기화¶
In [8]:
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, index=['r0','r1','r2'])
print(df)
print('\n')
# 행 인덱스를 정수형 위치 인덱스로 초기화 / 기존 행 인덱스는 열로 이동한다.
ndf = df.reset_index()
print(ndf)
c0 c1 c2 c3 c4
r0 1 4 7 10 13
r1 2 5 8 11 14
r2 3 6 9 12 15
index c0 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
행 인덱스를 기준으로 데이터프레임 정렬¶
In [12]:
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, index=['r0','r1','r2'])
print(df)
print('\n')
# 행 인덱스를 기준으로 데이터프레임의 값을 정렬 / ascending 옵션을 통해 Fasle : 내림차순 /True : 오름차순
ndf = df.sort_index(ascending=False)
print(ndf)
c0 c1 c2 c3 c4
r0 1 4 7 10 13
r1 2 5 8 11 14
r2 3 6 9 12 15
c0 c1 c2 c3 c4
r2 3 6 9 12 15
r1 2 5 8 11 14
r0 1 4 7 10 13
In [10]:
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, index=['r0','r1','r2'])
print(df)
print('\n')
# 특정 열의 데이터 값을 기준으로 데이터프레임 정렬하기
ndf = df.sort_values(by='c1', ascending=False)
print(ndf)
c0 c1 c2 c3 c4
r0 1 4 7 10 13
r1 2 5 8 11 14
r2 3 6 9 12 15
c0 c1 c2 c3 c4
r2 3 6 9 12 15
r1 2 5 8 11 14
r0 1 4 7 10 13
In [11]:
student1 = pd.Series({'국어':100,'영어':80,'수학':90})
print(student1)
print('\n')
percentage = student1/200
print(percentage)
print('\n')
print(type(percentage))
국어 100
영어 80
수학 90
dtype: int64
국어 0.50
영어 0.40
수학 0.45
dtype: float64
<class 'pandas.core.series.Series'>
In [14]:
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
result = pd.DataFrame([addition,subtraction,multiplication,division], index=['덧셈','뺄셈','곱셈','나눗셈'])
print(result)
국어 100
영어 80
수학 90
dtype: int64
수학 80
국어 90
영어 80
dtype: int64
국어 수학 영어
덧셈 190.000000 170.000 160.0
뺄셈 10.000000 10.000 0.0
곱셈 9000.000000 7200.000 6400.0
나눗셈 1.111111 1.125 1.0
In [16]:
import numpy as np
student1 = pd.Series({'국어':np.nan,'영어':80,'수학':90})
student2 = pd.Series({'수학':80,'국어':90})
print(student1)
print('\n')
print(student2)
print('\n')
addition = student1 + student2
subtraction = student1 - student2
multiplication = student1 * student2
division = student1 / student2
# 두 시리즈의 원소의 개수가 다르거나, 인덱스 값이 다른 경우 판다스는 유효한 값이 존재하지 않는다는 의미를 갖는 NAN으로 처리한다.
result = pd.DataFrame([addition,subtraction,multiplication,division], index=['덧셈','뺄셈','곱셈','나눗셈'])
print(result)
국어 NaN
영어 80.0
수학 90.0
dtype: float64
수학 80
국어 90
dtype: int64
국어 수학 영어
덧셈 NaN 170.000 NaN
뺄셈 NaN 10.000 NaN
곱셈 NaN 7200.000 NaN
나눗셈 NaN 1.125 NaN
연산 메소드¶
In [17]:
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)
국어 NaN
영어 80.0
수학 90.0
dtype: float64
수학 80
국어 90
dtype: int64
국어 수학 영어
덧셈 90.0 170.000 80.0
뺄셈 -90.0 10.000 80.0
곱셈 0.0 7200.000 0.0
나눗셈 0.0 1.125 inf
데이터프레임 연산¶
In [20]:
import seaborn as sns
titanic = sns.load_dataset('titanic')
df = titanic.loc[:,['age','fare']]
print(df.head())
print('\n')
addition = df +10
print(addition.head())
age fare
0 22.0 7.2500
1 38.0 71.2833
2 26.0 7.9250
3 35.0 53.1000
4 35.0 8.0500
age fare
0 32.0 17.2500
1 48.0 81.2833
2 36.0 17.9250
3 45.0 63.1000
4 45.0 18.0500
In [21]:
print(df.tail())
print('\n')
subtraction = addition - df
print(subtraction.tail())
age fare
886 27.0 13.00
887 19.0 30.00
888 NaN 23.45
889 26.0 30.00
890 32.0 7.75
age fare
886 10.0 10.0
887 10.0 10.0
888 NaN 10.0
889 10.0 10.0
890 10.0 10.0
데이터 입출력¶
In [48]:
#-*- coding:utf-8 -*-
file_path = 'C:\\Users\\rladl\\Jupyter.study\\05000266\\part2\\read_csv_sample.csv'
df1 = pd.read_csv(file_path)
print(df1)
print('\n')
df2 = pd.read_csv(file_path, header=None)
print(df2)
print('\n')
df3 = pd.read_csv(file_path, index_col=None)
print(df3)
print('\n')
df4 = pd.read_csv(file_path, index_col='c0')
print(df4)
c0 c1 c2 c3
0 0 1 4 7
1 1 2 5 8
2 2 3 6 9
0 1 2 3
0 c0 c1 c2 c3
1 0 1 4 7
2 1 2 5 8
3 2 3 6 9
c0 c1 c2 c3
0 0 1 4 7
1 1 2 5 8
2 2 3 6 9
c1 c2 c3
c0
0 1 4 7
1 2 5 8
2 3 6 9
In [50]:
df1 = pd.read_excel('C:\\Users\\rladl\\Jupyter.study\\05000266\\part2\\남북한발전전력량.xlsx', engine='openpyxl')
df2 = pd.read_excel('C:\\Users\\rladl\\Jupyter.study\\05000266\\part2\\남북한발전전력량.xlsx', engine='openpyxl', header=None)
print(df1)
print('\n')
print(df2)
전력량 (억㎾h) 발전 전력별 1990 1991 1992 1993 1994 1995 1996 1997 ... 2007 \
0 남한 합계 1077 1186 1310 1444 1650 1847 2055 2244 ... 4031
1 NaN 수력 64 51 49 60 41 55 52 54 ... 50
2 NaN 화력 484 573 696 803 1022 1122 1264 1420 ... 2551
3 NaN 원자력 529 563 565 581 587 670 739 771 ... 1429
4 NaN 신재생 - - - - - - - - ... -
5 북한 합계 277 263 247 221 231 230 213 193 ... 236
6 NaN 수력 156 150 142 133 138 142 125 107 ... 133
7 NaN 화력 121 113 105 88 93 88 88 86 ... 103
8 NaN 원자력 - - - - - - - - ... -
2008 2009 2010 2011 2012 2013 2014 2015 2016
0 4224 4336 4747 4969 5096 5171 5220 5281 5404
1 56 56 65 78 77 84 78 58 66
2 2658 2802 3196 3343 3430 3581 3427 3402 3523
3 1510 1478 1486 1547 1503 1388 1564 1648 1620
4 - - - - 86 118 151 173 195
5 255 235 237 211 215 221 216 190 239
6 141 125 134 132 135 139 130 100 128
7 114 110 103 79 80 82 86 90 111
8 - - - - - - - - -
[9 rows x 29 columns]
0 1 2 3 4 5 6 7 8 9 ... \
0 전력량 (억㎾h) 발전 전력별 1990 1991 1992 1993 1994 1995 1996 1997 ...
1 남한 합계 1077 1186 1310 1444 1650 1847 2055 2244 ...
2 NaN 수력 64 51 49 60 41 55 52 54 ...
3 NaN 화력 484 573 696 803 1022 1122 1264 1420 ...
4 NaN 원자력 529 563 565 581 587 670 739 771 ...
5 NaN 신재생 - - - - - - - - ...
6 북한 합계 277 263 247 221 231 230 213 193 ...
7 NaN 수력 156 150 142 133 138 142 125 107 ...
8 NaN 화력 121 113 105 88 93 88 88 86 ...
9 NaN 원자력 - - - - - - - - ...
19 20 21 22 23 24 25 26 27 28
0 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016
1 4031 4224 4336 4747 4969 5096 5171 5220 5281 5404
2 50 56 56 65 78 77 84 78 58 66
3 2551 2658 2802 3196 3343 3430 3581 3427 3402 3523
4 1429 1510 1478 1486 1547 1503 1388 1564 1648 1620
5 - - - - - 86 118 151 173 195
6 236 255 235 237 211 215 221 216 190 239
7 133 141 125 134 132 135 139 130 100 128
8 103 114 110 103 79 80 82 86 90 111
9 - - - - - - - - - -
[10 rows x 29 columns]
In [51]:
df = pd.read_json('C:\\Users\\rladl\\Jupyter.study\\05000266\\part2\\read_json_sample.json')
print(df)
print('\n')
print(df.index)
name year developer opensource
pandas 2008 Wes Mckinneye True
NumPy 2006 Travis Oliphant True
matplotlib 2003 John D. Hunter True
Index(['pandas', 'NumPy', 'matplotlib'], dtype='object')
반응형
'Python > Pandas' 카테고리의 다른 글
[Pandas] dtype 기반 열 선택 / select_dtypes (0) | 2022.06.06 |
---|---|
[pandas] pivot_table 원하는 대로 테이블 만들기 (0) | 2022.05.18 |
[pandas] rename, reset_index (0) | 2022.05.17 |
[pandas] 레이블인코딩 / 원핫 인코딩 / 문자열을 범주형 데이터로 바꾸기 (0) | 2022.03.05 |
[Pandas] 데이터 살펴보기 / head,tail,info,describe,shape,count,value_counts (0) | 2022.02.24 |