본문 바로가기

Python/Pandas

Pandas_01

반응형
day2_pandas1

판다스(Pandas) 란?

  • 데이터 처리와 분석을 위한 파이썬 라이브러리
  • 파이썬계의 엑셀
  • http://pandas.pydata.org
  • 아나콘다 설치시 자동으로 설치
  • 외부모듈이라서 임포트는?
    import pandas as pd

Pandas의 자료구조

  • 시리즈(Series) : 리스트와 딕셔너리 두가지의 장점을 섞어놓은 듯한 자료구조
  • 데이타프레임(DataFrame) : Row와 Column으로 이뤄진 2차원 형태의 자료구조. 시리즈(Series)의 결합체

pandas, numpy import

In [2]:
import numpy as np
import pandas as pd

pandas 버전 확인하기

In [3]:
pd.__version__
Out[3]:
'0.24.2'

Series 만들기

  • 시리즈(Series)란?
인덱스와 값이 자동으로 생성되는 데이터 단위
넘파이 배열에서 인덱스가 추가된 형태 
시리즈의 집합체는? => 데이타 프레임
파이 그래프 활용에 필요함
  • 1차원 배열

  • 시리즈이름 = pd.Series([리스트])

  • 시리즈이름 = pd.Series({딕셔너리})
  • 시리즈이름 = pd.Series(넘파이배열 np.arange() 등)

정수 리스트로 시리즈 생성

In [4]:
s1 = pd.Series([1,-5,8,9,10])
s1
Out[4]:
0     1
1    -5
2     8
3     9
4    10
dtype: int64
In [5]:
type(s1)
Out[5]:
pandas.core.series.Series

문자열 리스트로 시리즈 생성

In [6]:
s2 = pd.Series(['도','레','미'])
s2
Out[6]:
0    도
1    레
2    미
dtype: object
In [7]:
type(s2)
Out[7]:
pandas.core.series.Series

딕셔너리로 시리즈 생성

  • 키값이 인덱스로 변경된다.
In [9]:
myDict = {'a':'apple','b':'banana','c':'cat'}
mySeries = pd.Series(myDict)
mySeries
Out[9]:
a     apple
b    banana
c       cat
dtype: object
딕셔너리처럼 시리즈이름.인덱스이름 이나 시리즈이름[인덱스이름] 으로 호출 가능
In [10]:
mySeries['a']
Out[10]:
'apple'
In [11]:
mySeries.a
Out[11]:
'apple'

np.arange()로 시리즈 생성

In [13]:
# 2~20 사이의 짝수로 구성된 시리즈 만들기 
s3 = pd.Series(np.arange(2,21,2))
s3
Out[13]:
0     2
1     4
2     6
3     8
4    10
5    12
6    14
7    16
8    18
9    20
dtype: int32
In [14]:
s3[0]
Out[14]:
2

Series의 index, values, dtype 속성

  • 시리즈이름.index : 인덱스
  • 시리즈이름.values : 값 => 넘파이배열 형태로 표시
  • 시리즈이름.dtype : 데이터형
  • 시리즈이름.size : 전체 크기
  • 시리즈이름.shape : 구조 (행수,)
In [17]:
obj = pd.Series([4, 7, -5, 3])
obj
Out[17]:
0    4
1    7
2   -5
3    3
dtype: int64
In [18]:
obj.values
Out[18]:
array([ 4,  7, -5,  3], dtype=int64)
In [20]:
type(obj.values)
Out[20]:
numpy.ndarray
In [21]:
obj.index
Out[21]:
RangeIndex(start=0, stop=4, step=1)
In [22]:
type(obj.index)
Out[22]:
pandas.core.indexes.range.RangeIndex
In [23]:
obj.dtype
Out[23]:
dtype('int64')
In [24]:
obj.shape
Out[24]:
(4,)
In [25]:
obj.size
Out[25]:
4

Series를 생성할 때 인덱스 지정하기

시리즈이름 = pd.Series(  리스트/딕셔너리/넘파이배열 , 
                            index=[인덱스 리스트])
In [27]:
fruitSeries = pd.Series([100,200,400],index=['수박','토마토','바나나'])
fruitSeries
Out[27]:
수박     100
토마토    200
바나나    400
dtype: int64
In [28]:
# 값만 추출
fruitSeries.values
Out[28]:
array([100, 200, 400], dtype=int64)
In [29]:
# 인덱스값만 추출
fruitSeries.index
Out[29]:
Index(['수박', '토마토', '바나나'], dtype='object')

특정인덱스값 호출

  • 시리즈이름.index[인덱스번호]
In [31]:
# 첫번째 인덱스에 대한 값 추출 
fruitSeries.index[0]
Out[31]:
'수박'
In [ ]:
 

인덱스 다시 설정하기

  • 시리즈명.index = [리스트]
In [32]:
obj = pd.Series([4, 7, -5, 3], )
obj
Out[32]:
0    4
1    7
2   -5
3    3
dtype: int64
In [33]:
obj.index=['d', 'b', 'a', 'c']
obj
Out[33]:
d    4
b    7
a   -5
c    3
dtype: int64

딕셔너리를 시리즈로 지정하고 인덱스값만 추출하기

In [34]:
sdata = {"Charles": 35000, "Julia":71000, "Hayoung":16000, "Sangjae":5000}
obj= pd.Series(sdata)
obj
Out[34]:
Charles    35000
Julia      71000
Hayoung    16000
Sangjae     5000
dtype: int64
In [35]:
obj.index
Out[35]:
Index(['Charles', 'Julia', 'Hayoung', 'Sangjae'], dtype='object')
In [36]:
obj.index[1]
Out[36]:
'Julia'

Series 와 index 의 대표 이름 설정하기

  • 시리즈이름.name = 시리즈의대표이름
  • 시리즈이름.index.name = 인덱스의대표이름
In [37]:
sdata = {"Charles": 35000, "Julia":71000, "Hayoung":16000, "Sangjae":5000}
obj= pd.Series(sdata)
obj
Out[37]:
Charles    35000
Julia      71000
Hayoung    16000
Sangjae     5000
dtype: int64
In [30]:
obj.name = "Salary"
obj.index.name= "Names"
obj
Out[30]:
Names
Charles    35000
Hayoung    16000
Julia      71000
Sangjae     5000
Name: Salary, dtype: int64

퀴즈 - 시리즈 생성하기

아래와 같은 형태로 시리즈 grade를 생성하여라 

과목
국어     90
수학     80
영어    100
과학     55
역사     70
Name: 중간고사 성적표, dtype: int64
평균 :  79.0

Answer

In [44]:
grade = pd.Series([90,80,100,55,70])
grade.index = ['국어','수학','영어','과학','역사']
grade.name = '중간고사 성적표'
grade.index.name = '과목'
print(grade)
print('평균 : ', grade.mean())
과목
국어     90
수학     80
영어    100
과학     55
역사     70
Name: 중간고사 성적표, dtype: int64
평균 :  79.0

퀴즈 - 넘파이 난수로 시리즈 만들기

  • 100~200 사이의 난수로 구성된 시리즈를 아래와 같이 생성하여라.
  • 총점과 평균을 출력하여라. 평균은 소숫점 3자리까지 표시한다.

index
one      193
two      114
three    200
four     133
five     175
six      186
seven    109
Name: [ 100~201 Random Num Series ], dtype: int32
Total :  1110
Average : 158.571

Answer

In [40]:
data = np.random.randint(100,201,size=7)
data
Out[40]:
array([193, 114, 200, 133, 175, 186, 109])
In [42]:
myNumSeries = pd.Series(data)
myNumSeries.index = ['one','two', 'three', 'four', 'five', 'six', 'seven']
myNumSeries.name = '[ 100~201 Random Num Series ]'
myNumSeries.index.name = 'index'
print(myNumSeries)
print('Total : ',myNumSeries.sum())
print('Average : %.3f '% myNumSeries.mean())
index
one      193
two      114
three    200
four     133
five     175
six      186
seven    109
Name: [ 100~201 Random Num Series ], dtype: int32
Total :  1110
Average : 158.571 
반응형

'Python > Pandas' 카테고리의 다른 글

Pandas_06. 타이타닉  (0) 2019.08.26
Pandas_05  (0) 2019.08.11
Pandas_04  (0) 2019.08.11
Pandas_03  (0) 2019.08.11
Pandas_02  (0) 2019.08.11