반응형
In [2]:
import numpy as np
import pandas as pd
DataFrame 생성하기¶
- 데이타프레임이름 = pd.DataFrame(딕셔너리리스트)
- 딕셔너리 리스트 : 딕셔너리 구조인데 값이 리스트인 구조
- 데이타프레임을 딕셔너리 리스트로 만들면 키는 컬럼명으로 지정된다.
{ 키1:[리스트1], 키2:[리스트2] ... }
딕셔너리 리스트 생성하기¶
{ 키1:[값1, 값2, 값3 ...],
키2:[값1, 값2, 값3 ...] ... }
In [5]:
data = { "name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9]}
data
Out[5]:
In [7]:
data['name']
Out[7]:
In [10]:
data['points']
Out[10]:
딕셔너리 리스트를 데이타프레임으로 생성하기¶
In [12]:
# 딕셔너리 리스트의 키값이 컬럼명으로 지정된다.
df = pd.DataFrame(data)
df
Out[12]:
DataFrame 생성하기 - Nested Dictionary 이용¶
Nested Dictionary란? 딕셔너리 안에 딕셔너리가 정의된 구조
{키1: {키1-1:값1, 키1-2:값2 ... }, 키2: {키2-1:값1, 키2-2:값2 ... }}
데이타프레임 생성시 메인 키는 컬럼으로 서브키는 행의 인덱스로 설정
In [13]:
pop = {'Nevada':{2001:2.4, 2002:2.9},
'Ohio':{2000:1.5, 2001:1.7, 2002:3.6} }
pop
Out[13]:
In [14]:
pop['Nevada']
Out[14]:
In [32]:
df = pd.DataFrame(pop)
df
Out[32]:
데이타프레임의 컬럼은 시리즈이다.¶
In [33]:
df['Nevada']
Out[33]:
In [34]:
type(df['Nevada'])
Out[34]:
데이타프레임의 데이타형 확인하기¶
In [35]:
type(df)
Out[35]:
행으로 필터링하기¶
데이타프레임명.iloc[인덱스번호, :]
데이타프레임명.loc[행의인덱스이름]
In [27]:
df.iloc[0,:]
Out[27]:
In [31]:
df.loc[2000]
Out[31]:
DataFrame의 속성¶
- 데이타프레임의 행 요소 조회 – 데이타프레임이름.index
- 데이타프레임의 열 요소 조회 – 데이타프레임이름.columns
- 데이타프레임의 요소 값 조회 – 데이타프레임이름.values => 넘파이배열
- 데이타프레임 전체갯수 – 데이타프레임이름.size => 정수
- 데이타프레임 구조 – 데이타프레임이름.shape => 튜플구조 (행수,열수)
- 데이타프레임 컬럼별 데이터형 – 데이타프레임이름[컬럼명].dtype
In [36]:
data = { "name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9]}
In [37]:
df = pd.DataFrame(data)
df
Out[37]:
In [38]:
df.index
Out[38]:
In [39]:
df.columns
Out[39]:
데이타프레임의 실제 값은 넘파이배열 형태이다.¶
In [40]:
df.values
Out[40]:
In [41]:
type(df.values)
Out[41]:
2차원 구조¶
In [42]:
df.shape
Out[42]:
전체 갯수¶
In [43]:
df.size
Out[43]:
컬럼별 데이타형 확인하기¶
In [48]:
# 문자열 형태는 dtype('O') 로 출력
df['name'].dtype
Out[48]:
In [46]:
df['year'].dtype
Out[46]:
In [47]:
df['points'].dtype
Out[47]:
DataFrame의 행, 열의 대표이름 정의하기¶
- 데이타프레임의 행이름 정의 – 데이타프레임이름.index.name
- 데이타프레임의 열이름 정의– 데이타프레임이름.columns.name
In [49]:
# 딕셔너리 리스트 정의
data = {'Math':[100, 45, 89, 40],
'Eng':[80, 95, 88, 77],
'Sci':[100, 77, 89, 100]}
# 인덱스 지정 => 데이타프레임
df = pd.DataFrame(data, index=['Jullia', 'Maria', 'Jhon', 'Tom'])
df
Out[49]:
In [52]:
# 컬럼과 인덱스에 대표이름 정의
df.index.name = "[ Student ]"
df.columns.name = "[ Subject ]"
df
Out[52]:
DataFrame 생성하기 - 인덱스명, 컬럼명 지정¶
데이타프레임이름 = pd.DataFrame(딕셔너리, columns=[컬럼리스트],
index=[인덱스리스트])
In [59]:
data = {"name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9]}
data
Out[59]:
컬럼명 순서가 위에 data의 key의 순서와 같다¶
In [60]:
df = pd.DataFrame(data)
df
Out[60]:
인덱스,컬럼명과 함께 데이타프레임 정의하기¶
컬럼명 순서가 아래의 columns의 순서와 같다¶
In [61]:
df = pd.DataFrame(data, columns=["year", "name", "points"],
index=["one", "two", "three", "four", "five"])
df
Out[61]:
Dataframe 의 재정의 – 새로운 컬럼 추가¶
- 데이타 프레임 생성시 열값이 없는 경우에는 NaN으로 지정
- NaN(Not a Number)
데이타프레임 생성시 columns 이용¶
In [75]:
data = {"name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9]}
# "penalty" 새로운 컬럼 추가
df = pd.DataFrame(data, columns=["year", "name", "points","penalty"],
index=["one", "two", "three", "four", "five"])
df
Out[75]:
컬럼값 새로 지정하기¶
데이타프레임이름[컬럼명]=[값1, 값2 ... ]
In [76]:
df['penalty'] = [1,4,2,2,1]
df
Out[76]:
컬럼 추가하기 2¶
데이타프레임이름[새로운컬럼명] = [값1, 값2 ....]
In [77]:
df['Gender'] = ['Female', 'Female', 'Male', 'Male', 'Male']
df
Out[77]:
데이타프레임의 컬럼 이름 변경하기¶
데이타프레임명.columns = [컬럼값1, 컬럼값2 ...]
In [80]:
df.columns = ['년도', '이름', '포인트', '페널티', '성별']
df
Out[80]:
Dataframe 정보 알아보기¶
- 데이타프레임이름.describe()
- 총합, 평균, 표준편차,최소값을 자동으로 출력
In [67]:
data = {"name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9]}
df = pd.DataFrame(data)
In [68]:
df.describe()
Out[68]:
Dataframe 컬럼 필터링¶
- df[컬럼명] : 한개의 컬럼만 추출
- df.컬럼명 : 한개의 컬럼만 추출
- 컬럼 추출시 시리즈(Series) 표시
- 다중필터링: 여러개의 컬럼을 필터링시에는 겹대괄호 이용 [[ ... ]]
df[[컬럼명1, 컬럼명2…]]
In [93]:
data = {"name":["Haidi", "Haidi", "Haidi", "Charles", "Charles"],
"year":[2014, 2015, 2016, 2015, 2017],
"points":[1.5, 1.7, 3.6, 2.5, 2.9]}
df = pd.DataFrame(data, columns=["year", "name", "points"],
index=["one", "two", "three", "four", "five"])
df
Out[93]:
1개의 컬럼만 추출¶
In [40]:
df["year"]
Out[40]:
In [41]:
df.year
Out[41]:
In [94]:
# 추출된 컬럼은 시리즈
type(df.year)
Out[94]:
여러개의 컬럼추출시에는 [[ 와 ]] 이용¶
In [95]:
df[["year","points"]]
Out[95]:
Dataframe 열에 초기값 입력하기¶
- df[컬럼명] = 값 : 같은값으로 초기화
- df[컬럼명] = [값1, 값2 ... ] : 리스트형태로 나열
In [96]:
data = {'Math':[100, 45, 89, 40],
'Eng':[80, 95, 88, 77],
'Sci':[100, 77, 89, 100]}
df = pd.DataFrame(data, index=['Jullia', 'Maria', 'Jhon', 'Tom'])
새로운 컬럼 추가후 초기값을 동일하게 지정¶
데이타프레임이름[컬럼명] = 값
In [47]:
df['kor'] = 50
df
Out[47]:
새로운 컬럼 추가후 초기값이 서로 다른 경우 : 리스트 이용¶
In [48]:
df['Music'] = [100, 45, 60, 79]
df
Out[48]:
Dataframe 열 추가와 증가값 지정¶
- df[컬럼명] = np.arrange(최종숫자)
In [99]:
data = {"name":["Haidi", "Haidi", "Haidi", "Charles", "Charles"],
"year":[2014, 2015, 2016, 2015, 2017],
"points":[1.5, 1.7, 3.6, 2.5, 2.9]}
df = pd.DataFrame(data, columns=["year", "name", "points", "penalty"],
index=["one", "two", "three", "four", "five"])
In [101]:
df
Out[101]:
In [102]:
df["penalty"] = np.arange(11,16)
df
Out[102]:
Series 이용해서 DataFrame에 컬럼 추가하기¶
- 시리즈(Series) 생성시 행의 index 이름값 사용
- 생성된 시리즈를 컬럼 추가시 사용
In [104]:
data = {"name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9],
"penalty": np.arange(1,6)}
df = pd.DataFrame(data, columns=["year","name","points","penalty"],
index=["one", "two", "three", "four", "five"])
df
Out[104]:
시리즈 생성하기¶
indxe 명은 데이타프레임의 인덱스로 구성되어 있는지 확인
In [106]:
s = pd.Series([-1.2, -1.5, -1.7], index=["two", "four", "five"])
s
Out[106]:
Series를 데이타프레임의 새컬럼에 추가하기¶
In [107]:
df["debt"] = s
df
Out[107]:
Dataframe 기존 열의 값 이용하여 새로운 열 추가하기¶
- df[컬럼명] = df[컬럼1] - df[컬럼2]
- df[컬럼명] = df[컬럼]을 이용한 비교연산자
In [56]:
df
Out[56]:
기존 컬럼의 값에 연산을 적용해서 새로운 컬럼 추가¶
In [108]:
df["net_points"] = df["points"]-df["penalty"]
df
Out[108]:
기존 컬럼을 이용하여 조건식 생성하기 => 새로운 컬럼 추가¶
In [58]:
df["high_points"] = df["net_points"] > 0
df
Out[58]:
퀴즈¶
아래와 같은 형태로 데이타프레임을 생성하고 총합과 평균을 출력한다. 평균값이 70보다 크면 True를 출력한다.
Math Eng Sci Kor Music Total Avg Pass
Jullia 100 80 100 50 100 430 86.0 True
Maria 45 95 77 50 45 312 62.4 False
Jhon 89 88 89 50 60 376 75.2 True
Tom 40 77 100 50 79 346 69.2 False
In [126]:
data = {'Math':[100, 45, 89, 40],
'Eng':[80, 95, 88, 77],
'Sci':[100, 77, 89, 100],
'Kor':[50, 50, 50, 50 ],
'Music':[100, 45, 60, 79]}
df = pd.DataFrame(data, index=['Jullia', 'Maria', 'Jhon', 'Tom'])
df
Out[126]:
In [127]:
df['Total'] = df['Math']+df['Eng']+df['Sci']+df['Kor']+df['Music']
In [128]:
df['Avg'] = df['Total']/ 5
df['Pass'] = df['Avg'] > 70
df
Out[128]:
Dataframe : 열 삭제¶
- del df[컬럼명]
In [144]:
data = {"name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9],
"penalty": np.arange(1,6)}
df = pd.DataFrame(data, columns=["year","name","points","penalty"],
index=["one", "two", "three", "four", "five"])
In [145]:
del df["penalty"]
df
Out[145]:
Dataframe : 행 추출¶
- 데이타프레임이름[start:end]
- 인덱스는 행 이름이나 숫자로 가능
In [151]:
data = {"name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9],
"penalty": np.arange(1,6)}
df = pd.DataFrame(data, columns=["year","name","points","penalty"],
index=["one", "two", "three", "four", "five"])
df
Out[151]:
컬럼 슬라이싱¶
- 데이타프레임이름[컬럼명]
- 데이타프레임이름[[컬럼명1, 컬럼명2 ...]]
In [154]:
df[['year','name']]
Out[154]:
행 슬라이싱 1¶
- 데이타프레임[시작인덱스:끝인덱스]
In [70]:
df[0:3]
Out[70]:
행 슬라이싱 2¶
- 데이타프레임[시작인덱스명:끝인덱스명]
In [71]:
df["two":"four"]
Out[71]:
Dataframe : 행슬라이싱. loc 이용¶
- 데이타프레임이름.loc[인덱스명] => 1개
- 데이타프레임이름.loc[start인덱스명:end인덱스명] => 다중
- 인덱스는 행 이름으로 가능
In [175]:
df
Out[175]:
In [176]:
df.loc["two"]
Out[176]:
In [177]:
df.loc["two":"four"]
Out[177]:
Dataframe : 특정 행의 특정 열 추출. loc 이용¶
- df.loc[행인덱스start:행인덱스end, 컬럼명]
- 데이타프레임에서 start와 end-1까지의 행 추출시 컬럼 값만 추출
- 데이타프레임이름.loc[ : , [컬럼명1, 컬럼명2] ]
- 데이타프레임이름.loc[행인덱스1:행인덱스2, [컬럼명1, 컬럼명2] ]
In [178]:
data = {"name":['Elise', 'Julia', 'Jhon', 'Charles', 'Charles'],
"year":[2014, 2015, 2016, 2017, 2018],
"points":[1.5, 1.7, 3.6, 2.5, 2.9],
"penalty": np.arange(1,6)}
df2 = pd.DataFrame(data, columns=["year","name","points","penalty"],
index=["one", "two", "three", "four", "five"])
df2
Out[178]:
범위를 지정한 행의 특정 컬럼값¶
데이타프레임이름.loc[행인덱스start:행인덱스end, 컬럼명]
In [179]:
df2.loc["two":"four","points"]
Out[179]:
모든 행에서 특정 컬럼의 값 표시¶
데이타프레임이름.loc[ : , 컬럼명 ]
In [181]:
df2.loc[:, "year"]
Out[181]:
전체 데이타프레임¶
데이타프레임이름.loc[ : , : ]
In [183]:
df2.loc[:,:]
Out[183]:
특정 행 값 표시¶
데이타프레임이름.loc[행이름 , : ]
In [184]:
df2.loc['one', :]
Out[184]:
다중 컬럼값 추출¶
데이타프레임이름.loc[ : , [컬럼명1, 컬럼명2] ]
In [185]:
df2.loc[:, ["year","name"]]
Out[185]:
연속된 행의 연속된 컬럼 표시¶
데이타프레임이름.loc[ 인덱스명Start:인덱스명End , 컬럼명Start:컬럼명End ]
In [187]:
df2.loc["three":"five","year":"points"]
Out[187]:
Dataframe : loc 이용. 행 추가¶
- 데이타프레임이름.loc [ 행인덱스명, : ] = [값1, 값2 ...]
In [188]:
df2
Out[188]:
In [189]:
df2.loc['six',:] = [2019, "hayoung", 4.0, 6]
df2
Out[189]:
Dataframe : loc 이용. 열 추가¶
- 데이타프레임이름.loc [ :, 열인덱스명 ] = [값1, 값2 ...]
In [190]:
df2.loc[:,'bonus']=[10,20,30,40,50,60]
df2
Out[190]:
Dataframe : iloc 이용. 행추출¶
- 데이타프레임이름.iloc[인덱스번호] : 시리즈형태로 세로로 추출
In [192]:
df2
Out[192]:
In [193]:
df.iloc[0]
Out[193]:
Dataframe : iloc 이용. 행, 컬럼 범위 추출¶
- 데이타프레임이름. iloc[ 인덱스start:인덱스end, 컬럼Start:컬럼End]
- 데이타프레임이름.iloc[ [인덱스 숫자], [컬럼인덱스 숫자 ]]
- 데이타프레임이름.iloc[ [인덱스숫자1,인덱스숫자2 ..], [컬럼인덱스숫자1, 컬럼인덱스숫자2 ... ]]
In [194]:
df2
Out[194]:
연속된 행과 컬럼 추출¶
- 데이타프레임이름. iloc[ 인덱스start:인덱스end, 컬럼Start:컬럼End]
In [196]:
df2.iloc[0:2, 0:2]
Out[196]:
비연속적인 행과 컬럼 추출 : 겹대괄호 이용¶
데이타프레임이름.iloc[ [인덱스숫자1,인덱스숫자2 ..],
[컬럼인덱스숫자1, 컬럼인덱스숫자2 ... ]]
In [197]:
df2.iloc[[0,1,3], [1,2]]
Out[197]:
In [198]:
df2.iloc[:, 1:4]
Out[198]:
넘파이 2차원 배열을 이용하여 데이타프레임 만들기¶
In [218]:
dfTest = pd.DataFrame(np.random.randint(1,100,size=30).reshape(-1,5),
columns=['col1','col2','col3', 'col4', 'col5'],
index =['row1','row2','row3', 'row4', 'row5', 'row6'])
dfTest
Out[218]:
퀴즈 : iloc / loc 이용¶
1) row1 행만 표시
2) row2~row4까지 표시
3) col5 컬럼만 표시
4) row1 행중에서 col2,col5 표시
5) row5,6 행 중에서 col3만 표시
In [231]:
dfTest.iloc[0,:]
Out[231]:
In [232]:
dfTest.iloc[1:4,:]
Out[232]:
In [233]:
dfTest.iloc[:,4]
Out[233]:
In [234]:
dfTest.iloc[0,[1,4]]
Out[234]:
In [235]:
dfTest.iloc[[4,5],2]
Out[235]:
In [236]:
dfTest.iloc[4:6,2]
Out[236]:
행과 열 삭제하기¶
- 데이타프레임명.drop([행이름1, 행이름2 ... ])
- 데이타프레임명.drop([열이름1, 열이름2 ... ], axis=1 )
- 데이타프레임명.drop(index=[행이름1, 행이름2 ...],
columns=[열이름1, 열이름2 ... ])
- 원본 데이타프레임에는 실제로 삭제되지 않는다.
- 원본 데이타프레임에서도 삭제되길 원한다면
inplace=True 옵션을 추가해야한다.
`
In [259]:
dfTest2 = pd.DataFrame(np.random.randint(1,100,size=30).reshape(-1,5),
columns=['col1','col2','col3', 'col4', 'col5'],
index =['row1','row2','row3', 'row4', 'row5', 'row6'])
dfTest2
Out[259]:
특정 컬럼 삭제¶
In [260]:
# inplace=True 원본에도 삭제 적용
dfTest2.drop(columns = ['col5'], inplace=True)
In [261]:
dfTest2
Out[261]:
특정 행 삭제¶
In [262]:
dfTest2.drop(index=['row1'], inplace=True)
dfTest2
Out[262]:
In [264]:
dfTest2.drop(index=['row5'], columns = ['col4'], inplace=True)
In [265]:
dfTest2
Out[265]:
반응형