Pandas란 구조화된 데이터를 효과적으로 처리하고 저장할 수 있는 파이썬 라이브러리. Array 계산에 특화된 numpy를 기반으로 만들어져서 다양한 기능들을 제공한다.
○ Series: numpy array가 보강된 형태 Data와 Index를 가지고 있다.
- 인덱스를 가지고 있고 인덱스로 접근 가능하다.
import pandas as pd
data = pd.Series([1, 2, 3, 4])
data = pd.Series([1,2,3,4]), index=['a','b','c','d'])
data['b'] → (출력) 2
- 딕셔너리로 만들 수 있다.
population_dict = {
'korea' : 5180, 'japan' : 12718, 'china' : 141500, 'usa' : 32676
}
population = pd.Series(population_dict)
population.values로 하면 numpy array로 나온다. 확인해 봐라
[실습1] Series 데이터 *대문자로
import numpy as np
import pandas as pd
# 예시) 시리즈 데이터를 만드는 방법.
series = pd.Series([1,2,3,4], index = ['a', 'b', 'c', 'd'], name="Title")
print(series, "\n")
# 국가별 인구 수 시리즈 데이터를 딕셔너리를 사용하여 만들어보세요.
population_dict = {'korea' : 5180, 'japan' : 12718, 'china' : 141500, 'usa' : 32676}
country = pd.Series(population_dict)
print(country)
○ DataFrame : 여러 개의 Series가 모여서 행과 열을 이룬 데이터
gdp_dict = { 'korea' : 16932000, 'japan' : 5167000, 'china' : 140925, 'usa' : 2041280 }
gdp = pd.Series(gdp_dict)
country = pd.DataFrame({'population' : population, 'gdp' : gdp})
country.index → (출력) Index [ 'china', 'japan', 'korea', 'usa']
country.columns → (출력) Index(['gdp', 'population'], dtype = 'object')
country['gdp']
type(country['gdp']) → (출력) pandas.core.series.Series
- Series도 numpy array처럼 연산자를 쓸 수 있다.
gdp_per_capita = country['gdp'] / country['population']
country['gdp per capita'] = gdp_per_capita
○ 저장과 불러오기: 만든 프레임을 저장할 수 있다.
country.to_csv(". /country.csv")
country.to_excel("country.xlsx")
country = pd.read.csv("./country.csv")
country = pd.read.excel("country.xlsx")
[실습2] DataFrame (두번째 오답)
import numpy as np
import pandas as pd
# 두 개의 시리즈 데이터가 있습니다.
print("Population series data:")
population_dict = {
'korea': 5180,
'japan': 12718,
'china': 141500,
'usa': 32676
}
population = pd.Series(population_dict)
print(population, "\n")
print("GDP series data:")
gdp_dict = {
'korea': 169320000,
'japan': 516700000,
'china': 1409250000,
'usa': 2041280000,
}
gdp = pd.Series(gdp_dict)
print(gdp, "\n")
# 이곳에서 2개의 시리즈 값이 들어간 데이터프레임을 생성합니다.
print("Country DataFrame")
country = pd.DataFrame({'population' : population, 'gdp' : gdp})
# 데이터 프레임에 gdp per capita 칼럼을 추가하고 출력합니다.
gdp_per_capita = country['gdp'] / country['population']
country['gdp_per_capita'] = gdp_per_capita
print(country['gdp_per_capita'])
print(type(country['gdp']))
# 데이터 프레임을 만들었다면, index와 column도 각각 확인해보세요.
print(country.index)
print(country.columns)
○ Indexing / Slicing
Ioc : 명시적인 인덱스를 참조하는 Indexing/Slicing
country.loc['china']
country.loc['japan':'korea', :'population'] # population 이전의 값들을 보여달라
iloc: 파이썬 스타일 정수 인덱스 Indexing/Slicing
country.iloc[0]
country.iloc[1:3, :2] * 1~3까지지만 파이썬에서 3을 포함하지 않으므로 1~2만 (??)
○ DataFrame 새 데이터 추가 / 수정
- 리스트로 추가하는 방법과 딕셔너리로 추가하는 방법
dataframe = pd.DataFrame(columns=['이름','나이','주소'])
dataframe.loc[0] = ['임원균', '26', '서울']
dataframe.loc[1] = {'이름' : '철수', '나이' : '25', '주소' : '인천'}
dataframe.loc[1, '이름'] = '영희' # 특정 위치 이름을 변경
○ DataFrame 새 칼럼 추가
dataframe['전화번호'] = np.nan # not a number, 빈칸으로
dataframe.loc[0, '전화번호'] = '01012341234'
len(dataframe) → (출력) 2
○ 칼럼 선택하기 : 칼럼 이름이 하나만 있다면 Series, 리스트로 들어가 있다면 DataFrame
dataframe['이름']
dataframe[['이름' '주소', '나이']]
[실습3] Indexing & Slicing
import numpy as np
import pandas as pd
# 첫번째 컬럼을 인덱스로 country.csv 파일 읽어오기.
print("Country DataFrame")
country = pd.read_csv("./data/country.csv", index_col=0)
print(country, "\n")
# 명시적 인덱싱을 사용하여 데이터프레임의 "china" 인덱스를 출력해봅시다.
print(country.loc['china'])
# 정수 인덱싱을 사용하여 데이터프레임의 1번째부터 3번째 인덱스를 출력해봅시다.
print(country.iloc[1:4])
○ 누락된 데이터 체크 : 튜토리얼에서 보는 데이터와 달리 현실의 데이터는 누락되어 있는 형태가 많다
dataframe.isnull() # true, false로 표현
dataframe.notnull()
dataframe.dropna() → (출력) 비어있는 row를 삭제
dataframe['전화번호'] = dataframe['전화번호'].fillna('전화번호 없음') → (출력) 전화번호 비어있는 곳에 '전화번호 없음'으로 표기
○ Series 연산 : numpy array에서 사용했던 연산자들을 활용할 수 있다.
A = pd.Series([2,4,6], index=[0,1,2])
B = pd.Series([1,3,5], index=[1,2,3])
A+B
A.add(B, fill_value=0) # index가 없는 곳은 '0'으로 채워서 계산
○ DataFrame 연산 : +, -, *, /
A = pd.DataFrame(np.random.randint(0,10,(2,2)), columns=list("AB")) #0부터 10사이 데이타로 2x2 행렬을 만듬
B = pd.DataFrame(np.random.randint(0,10,(3,3)), columns=list("BAC"))
A+B
A.add(B, fill_value=0)
○ 집계함수 : numpy array에서 사용했던 sum, mean 등을 활용할 수 있다.
data = {'A' : [i+5 for i in range(3)], 'B' : [i**2 for i in range(3)]}
df = pd.DataFrame(data)
df['A'].sum() #18
df.sum()
df.mean()
[실습4] pandas 연산과 함수
import numpy as np
import pandas as pd
print("A: ")
A = pd.DataFrame(np.random.randint(0, 10, (2, 2)), columns=['A', 'B']) #칼럼이 A, B입니다.
print(A, "\n")
print("B: ")
B = pd.DataFrame(np.random.randint(0, 10, (3, 3)), columns=['B', 'A', 'C']) #칼럼이 B, A, C입니다.
print(B, "\n")
# 아래에 다양한 연산을 자유롭게 적용해보세요.
print(A + B)
print(A.add(B,fill_value=0))
○ 값으로 정렬하기 : sort_values()
df = pd.DataFrame({'col1' : [2, 1, 9, 8, 7, 4],
'col2' : ['A', 'A', 'B', np.nan, 'D', 'C'],
'col3' : [0, 1, 9, 4, 2, 3]})
df.sort_values('col1') # 지정된 칼럼 값으로 정렬됨. 기본은 오름차순
df.sort_values('col1', ascending=False) # 내림차순 정렬
df.sort_values(['col2','col1']) # col2값으로 먼저 정렬 후 col1으로 정렬
[실습5] DataFrame 정렬하기
import numpy as np
import pandas as pd
print("DataFrame: ")
df = pd.DataFrame({
'col1' : [2, 1, 9, 8, 7, 4],
'col2' : ['A', 'A', 'B', np.nan, 'D', 'C'],
'col3': [0, 1, 9, 4, 2, 3],
})
print(df, "\n")
# 정렬 코드 입력해보기
# Q1. col1을 기준으로 오름차순으로 정렬하기.
sorted_df1 = df.sort_values('col1')
print(sorted_df1)
# Q2. col2를 기준으로 내림차순으로 정렬하기.
sorted_df2 = df.sort_values('col2', ascending=False)
print(sorted_df2)
# Q3. col2를 기준으로 오름차순으로, col1를 기준으로 내림차순으로 정렬하기.
sorted_df3 = df.sort_values(['col2','col1'], ascending=[True, False])
print(sorted_df3)
[실습6] 잭이 심은 콩나무 데이터 정렬하기
from elice_utils import EliceUtils
import pandas as pd
elice_utils = EliceUtils()
def main():
# ./data/tree_data.csv 파일을 읽어서 작업해보세요!
tree_df = pd.read_csv("./data/tree_data.csv")
# print(len(tree_df.dropna()))
tree_df = tree_df.sort_values("height", ascending=False)
print(tree_df.iloc[:1])
# print(tree_df.head(5))
if __name__ == "__main__":
main()
'IT인터넷 > Python' 카테고리의 다른 글
[디지털 문해력]Python으로 시작하는 데이터 분석_Pandas 심화(211002) (0) | 2021.10.02 |
---|---|
[디지털 문해력]Python으로 시작하는 데이터 분석_Numpy 사용해보기(210927) (0) | 2021.10.02 |
[디지털 문해력]Python 파이썬 배우기 2일차(210915) (0) | 2021.09.19 |
[디지털 문해력]Python 파이썬 배우기 1일차(210914) (0) | 2021.09.18 |
[디지털 문해력]Python으로 배우는 데이터 분석_확률과 통계 배우기 2일차(210928) (0) | 2021.09.18 |
댓글