Numpy/Pandas 기초 학습 - 02 Pandas 기본 알아보기

핏자·2023년 4월 11일
0

인공지능사관학교

목록 보기
14/31
post-thumbnail
  • Series 데이터

- Series

Series: numpy array가 보강된 형태 Data와 Index를 가지고 있다.

import pandas as pd

data = pd.Series([1,2,3,4])
data

인덱스를 가지고 있고 인덱스로 접근 가능하다

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)



  • DataFrame

- DataFrame

여러 개의 Series가 모여서 행과 열을 이룬 데이터

gdp_dict = {
	'korea' : 169320000,
    'japan' : 51670000.
    'china' : 1409250000.
    'usa' : 2041280000
}
gdp = pd.Series(gdp_dict)
country = pd.DataFrame({
	'population' : population,
    'gdp' : gdp
})

country.index # Index(['china','japan','korea','ues'], dtype='object')
country.object(['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")
countty = pd.read_excel("./country.xlsx")



  • Indexing & slicing

- Indexing / Slicing

loc: 명시적인 인덱스를 참조하는 인덱싱/슬라이싱

country.loc['china']

country.loc['japan':'Korea',:'population']

iloc: 파이썬 스타일 정수 인덱스 인덱싱/슬라이싱

country.iloc[0]

country.iloc[1:3, :2]

- DataFrame 새 데이터 추가/수정

리스트로 추가하는 방법과 딕셔너리로 추가하는 방법

dataframe = pd.DataFrame(columns=['이름','나이','주소'])
dataframe.loc[0] = ['임원균', '26', '서울']
dataframe.loc[1] = {'이름':'철수', '나이':'25', '주소':'인천'}

dataframe.loc[1, '이름'] = '영희'

- DataFrame 새 컬럼 추가

새로운 컬럼 추가

dataframe['전화번호'] = np.nan
dataframe.loc[0, '전화번호'] = '01012341234'

len(dataframe) # 2

- 컬럼 선택하기

컬럼이름이 하나만 있다면 Series

리스트로 들어가 있다면 DataFrame

dataframe["이름"]
dataframe[["이름","주소","나이"]]



  • Pandas 연산과 함수

- 누락된 데이터 체크

튜토리얼에서 보는 데이터와 달리 현실의 데이터는

누락되어 있는 형태가 많다

dataframe.isnull()
dataframe.notnull()

dataframe.dropna()
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)

- DataFrame 연산

add(+), sub(-), mul(*), div(/)

A = pd.DataFrame(np.random.randint(0, 10, (2,2)), columns=list("AB"))
B = A = 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()



  • DataFrame 정렬하기

- 값으로 정렬하기

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(수정 전)
	c1  c2  c3
---------------
0	2	A	0
1	1	A	1
2	9	B	9
3	8	NaN	4
4	7	D	2
5	4	C	3


#df(수정 후)
	c1  c2  c3
---------------
1	1	A	1
0	2	A	0
5	4	C	3
4	7	D	2
3	8	NaN	4
2	9	B	9

df.sort_values('col1', ascending=False) (ascending -> 오름차순)

#df(수정 전)
	c1  c2  c3
---------------
0	2	A	0
1	1	A	1
2	9	B	9
3	8	NaN	4
4	7	D	2
5	4	C	3


#df(수정 후)
	c1  c2  c3
---------------
2	9	B	9
3	8	NaN	4
4	7	D	2
5	4	C	3
0	2	A	0
1	1	A	1

df.sort_values('col2', 'col1')

#df(수정 전)
	c1  c2  c3
---------------
0	2	A	0
1	1	A	1
2	9	B	9
3	8	NaN	4
4	7	D	2
5	4	C	3


#df(수정 후)
	c1  c2  c3
---------------
1	1	A	1
0	2	A	0
2	9	B	9
5	4	C	3
4	7	D	2
3	8	NaN	4







  • 실습문제1. 잭이 심은 콩나무 데이터 정렬하기

    csv 데이터를 읽고, 정렬해서 height가 큰 순서대로 상위 5개 나무의 정보를 확인

    height 변수를 큰 순서대로 정렬하고, 상위 5개의 나무를 출력하라

import pandas as pd

# ./data/tree_data.csv 파일을 읽어서 작업해보세요!
tree = pd.read_csv("./data/tree_data.csv")
top_tree = tree.sort_values('height', ascending = False)

print(top_tree.iloc[0:5])
>>>		beans  circumference  height
>>> --------------------------------
>>> 0   72459           2.30  994.98
>>> 17  27374           1.92  986.82
>>> 31  91643           2.00  982.68
>>> 90  21681           0.51  953.62
>>> 92   5831           1.37  946.11
profile
개발자 핏자의 로그들

0개의 댓글