본문 바로가기
Python/Alice Python Basic

Python 기초 프로그래밍의 간단 정리4

by Thinking 2021. 7. 8.

1. Pandas의 간단 정리

 Pandas는 파이썬 라이브러리, 구조화된 데이터를 효과적으로 처리, 저장할 수 있고 array 계산에 특화된 numpy 기반으로 설계되었다.

 

 

1) Series 데이터

 numpy의 array가 보강된 형태이며 data와 인덱스를 가지고 있다. series는 값을 ndarray의 형태로 가지고 있다.

 

import pandas as pd

 

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

print(data)                                   # 각 인덱스가 저절로 0,1,2,3 정해지고 순서대로 1,2,3,4 값이 지정

print(type(data))                        #<class ‘pandas.core.series.Series’>

print(type(data.values)).           # <class ‘numpy.ndarray’>

 

2) Dtype 인자로 데이터 타입을 지정할 수 있다.

 

data = pd.series([1,2,3,4], dtype=“float”)

print(data.dtype)                        # float64 타입으로 지정

 

3) 인덱스를 지정할 수 있고, 인덱스로 접근 가능

 

Data = pd.series([1,2,3,4]), index=[‘a’, ‘b’, ‘c’, ‘d’])

data[‘c’] =5   인덱스로 접근하여 요소 변경 가능

 

4) Dictionary를 활용하여 Series 생성 가능

 

population_dict = { 

  ‘china’ : 1415,

  ‘Korea’ : 121

}

population = pd.series(population_dict)  -> 국가명이 인덱스

 

 

DataFrame에 관하여

 DataFrame은 여러개의 series가 모여서 행과 열을 이룬 데이터를 의미한다.

 

1) 여러개의 Series를 모아 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("GDP series data:")
gdp_dict = {
    'korea': 169320000,
    'japan': 516700000,
    'china': 1409250000,
    'usa': 2041280000,
}
gdp = pd.Series(gdp_dict)

# 이곳에서 2개의 시리즈 값이 들어간 데이터 프레임을 생성합니다.
print("<Country DataFrame>")
country = pd.DataFrame({
    'population': population,
    'gdp' : gdp
})
print(country)를 하게 되면 아래처럼 실행 결과가 나오는 것을 확인할 수 있다.

 

<Country DataFrame>

                          population                           gdp

korea                          5180              169320000

japan                         12718              517800000

china                       141500           1409250000

usa                            32676           2041280000

 

 

2) dictinary 를 활용하여 DataFrame 생성 가능

 

data= {

  ‘country’ : [‘china’, ‘korea’],

  ‘gap’ : [12412, 123],

  ‘population’ : [123,123]

}

country = pd.DataFrame(data)                   # 위에서 만든 데이터

country = country.set_index(‘country’)     # 국가를 index로 지정

 

Country                   gdp                     population

country

China                    12412                                 123

Korea                        123                                 123

 

 

3) DataFrame 다양한 특성

 

Dataframe 속성 확인 방법 -> shape, size, ndim, values 등이 있다.

Dataframe 의 인덱스와 칼럼에 이름 지정 표현

 

country.index.name = “Country”

country.columns.name = “info”

 

Dataframe 저장 및 불러오기 기능

 

country.to_csv(“ ./country.csv”)

csv -> comma separated value

country = pd.read_csv(“./country.csv”)

 

country.to_excel(“country.xlsx”)

country = pd.read_excel(“country.xlsx”)

 

 

4) DataFrame 데이터 선택 및 변경

 

 

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

 

country.loc[‘china’] ->인덱싱

country.loc[‘japan’ : ‘korea’, : ‘population’] ->슬라이싱

[Japan~korea까지 추출 , gap~ population까지 추출]

 

2. .iloc : 파이썬 스타일의 정수 인덱스 인덱싱/슬라이싱 (암묵적인 순서 -> 값)

 

country.iloc [0]   #인덱싱

country.iloc [1:3, :2] #슬라이싱

 

3. 칼럼명을 활용하여 dataframe에서 데이터 선택 가능

 

country

country[‘gdp’] ->series ( gdp 칼럼이 안타 나남)

country[[‘gdp’]] ->dataframe ( gdp 칼럼이 나타남)

 

4. Masking 연산이나 query 함수를 활용하여 조건에 맞는 DataFrame행 추출 가능

 

country [country[‘population’] <10000] -> Masking 연산 활용

country.query(“population > 10000”) -> query 활용

 

5. seriesnumpy array처럼 연산자 활용 가능

 

gdp_per_capita = country[‘gdp’]/country[‘population’]

country[‘gdp per capita’] = gdp_per_capita

 

6. 리스트로 추가 or 딕셔너리로 추가하는 방법

 

df = pd.DataFrame(columns = [‘이름’, ’ 나이’, ’ 주소’])

df.loc [0] = [‘길동’, ’ 26’, ’ 서울’]

df.loc [1] = {‘이름’ : ‘철수’, ‘나이’ :26, ‘주소’=‘인천’}

df.loc [1, ‘이름’] = ‘영희’                                                       #철수 -> 영희로 데이터 수정

 

nan값으로 초기화한 새로운 칼럼 추가

df[‘전화번호’] = np.nan                               

cf) nan ->not a number(비어있는 데이터라는 뜻)               #새로운 칼럼 추가 후 초기화

 

df.loc [0, ’ 전화번호’] = ’ 01012341234’                            #명시적 데이터 추가

df.drop(‘전화번호’ , axis =1, inplace =True)                      # 칼럼 삭제, (axis =1 :열 방향 / axis =0 : 행방 향)을 의미

inplace = True : 원본 변경 o / inplace = False : 원본 변경 x )

 

cf)

np.random.randint : 모든 숫자 중 1개 선택하여 뽑을 때 사용

np.random.rand(m, n) : m과 n의 0~1 난수 배정할 때 사용