Series와 DataFrame
1. Series
객체를 담을 수 있는 1차원 배열같은 자료 구조
Series 배열로 생성하기
ser = pd.Series([1,-2,3,0])
ser
Out[55]:
0 1
1 -2
2 3
3 0
dtype: int64
Serise의 index설정하기
# Series생성과 동시에 index 설정하기
ser2 = pd.Series([3,-9,4], index = ['a','b','c'])
ser2
Out[59]:
a 3
b -9
c 4
dtype: int64
# 만들어진 Series에 대입하여 index 설정하기
ser2.index = ['bob','steve','kim']
ser2
Out[60]:
bob 3
steve -9
kim 4
dtype: int64
# Serise index 출력
ser2.index
Out[61]: Index(['bob', 'steve', 'kim'], dtype='object')
Series데이터의 특정값 추출하기
# index로 추출
ser2['bob']
Out[70]: 3
ser2[['bob','steve','kim']]
Out[71]:
bob 3
steve -9
kim 4
dtype: int64
# 값의 연산으로 추출
ser2[ser2>2]
Out[72]:
bob 3
kim 4
dtype: int64
# index로 값 변경
ser2['bob'] = 999
ser2
Out[74]:
bob 999
steve -9
kim 4
dtype: int64
# 값 하나당 *2를 계산
ser2*2
Out[75]:
bob 1998
steve -18
kim 8
dtype: int64
사전형 데이터로 Series 만들기
# 사전형으로 series만들기
data = {'a':2,'b':-6,'c':99}
ser3 = pd.Series(data)
ser3
Out[76]:
a 2
b -6
c 99
dtype: int64
사전형 데이터로 Serise를 만들게 되면 사전의 키값 순으로 index가 나열 된다. index를 지정하고 싶으면 직접 넘겨 주면 된다. 이때 기존에 존재 하지 않던 index가 있다면 해당 값은 null로 취급한다.
list_index = ['a','b','g']
ser3 = pd.Series(data, index = list_index)
ser3
Out[9]:
a 2.0
b -6.0
g NaN
dtype: float64
Series의 null값 찾기
# NAN값은 True로 표시
pd.isnull(ser3)
Out[10]:
a False
b False
g True
dtype: bool
# NAN값은 False로 표시
pd.notnull(ser3)
Out[11]:
a True
b True
g False
dtype: bool
Series객체와 Series index에 name속성 부여하기
# Series에 이름 설정
ser3.name = 'series3'
# index에 이름 설정
ser3.index.name = 'number'
ser3
Out[14]:
number
a 2.0
b -6.0
g NaN
Name: series3, dtype: float64
2. DataFrame
DataFrame은 표 같은 스프레드시트 형식의 자료구조이고 여러 개의 컬럼이 있는데 각 컬럼은 서로 다른 종류의 값(숫자, 문자, bool)을 담을 수 있다.
사전형 데이터로 DataFrame 만들기
data = {'state': ['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],
'year' : [2000,2001,2002,2001,2002,2003],
'pop' : [1.5,1.7,3.6,2.4,2.9,3.2]}
df = pd.DataFrame(data)
df
Out[17]:
state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
3 Nevada 2001 2.4
4 Nevada 2002 2.9
5 Nevada 2003 3.2
head를 사용해 위에서 5개 행만 출력하기
df.head()
Out[18]:
state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
3 Nevada 2001 2.4
4 Nevada 2002 2.9
columns명을 사용해서 순서 columns순서 변경하기
pd.DataFrame(data,columns = ['year','pop','state'])
Out[19]:
year pop state
0 2000 1.5 Ohio
1 2001 1.7 Ohio
2 2002 3.6 Ohio
3 2001 2.4 Nevada
4 2002 2.9 Nevada
5 2003 3.2 Nevada
# Serise와 마찬가지로 없는 열을 입력하면 NAN값이 저장된다
df2 = pd.DataFrame(data,columns = ['year','pop','state','debt'])
df2
Out[20]:
year pop state debt
0 2000 1.5 Ohio NaN
1 2001 1.7 Ohio NaN
2 2002 3.6 Ohio NaN
3 2001 2.4 Nevada NaN
4 2002 2.9 Nevada NaN
5 2003 3.2 Nevada NaN
columns 추출하기
# 속성형식 접근법
df.year
Out[21]:
0 2000
1 2001
2 2002
3 2001
4 2002
5 2003
Name: year, dtype: int64
# 사전형식 접근법
df['state']
Out[22]:
0 Ohio
1 Ohio
2 Ohio
3 Nevada
4 Nevada
5 Nevada
Name: state, dtype: object
columns에 값 대입시키기
하나의 값만 설정하면 해당 값이 해당 columns의 모든 row에 대입된다. 값으로 배열을 입력하게 되면 배열의 값들이 row에 대입 된다. 이때 배열의 수가 행의 수와 일치하지 않으면 오류가 발생한다. 하지만 Series를 대입하게 되면 행의 수가 맞지 않아도 결측치로 대입이 된다.
# 모든 값이 일괄 적용
df2.debt = 1.6
df2
Out[26]:
year pop state debt
0 2000 1.5 Ohio 1.6
1 2001 1.7 Ohio 1.6
2 2002 3.6 Ohio 1.6
3 2001 2.4 Nevada 1.6
4 2002 2.9 Nevada 1.6
5 2003 3.2 Nevada 1.6
# 배열을 사용해 배열 값을 대입
df2.debt = np.arange(6.)
df2
Out[32]:
year pop state debt
0 2000 1.5 Ohio 0.0
1 2001 1.7 Ohio 1.0
2 2002 3.6 Ohio 2.0
3 2001 2.4 Nevada 3.0
4 2002 2.9 Nevada 4.0
5 2003 3.2 Nevada 5.0
# 행이 맞지 않은 series를 대입했을 경우
ser1 = pd.Series([1.2,1.3,99])
df2.debt = ser1
df2
Out[38]:
year pop state debt
0 2000 1.5 Ohio 1.2
1 2001 1.7 Ohio 1.3
2 2002 3.6 Ohio 99.0
3 2001 2.4 Nevada NaN
4 2002 2.9 Nevada NaN
5 2003 3.2 Nevada NaN
del을 사용해 열 삭제하기
del df2['debt']
df2
Out[42]:
year pop state
0 2000 1.5 Ohio
1 2001 1.7 Ohio
2 2002 3.6 Ohio
3 2001 2.4 Nevada
4 2002 2.9 Nevada
5 2003 3.2 Nevada
중첩 사전데이터를 이용해서 DataFrame 만들기
data = {'nevada': {2001:2.4, 2002:2.9},
'ohio':{2000:1.5,2001:1.7,2002:3.6}}
df3 = pd.DataFrame(data)
df3
Out[44]:
nevada ohio
2001 2.4 1.7
2002 2.9 3.6
2000 NaN 1.5
DataFrame 전치(row와 columns 뒤집기)
df2.T
Out[45]:
0 1 2 3 4 5
year 2000 2001 2002 2001 2002 2003
pop 1.5 1.7 3.6 2.4 2.9 3.2
state Ohio Ohio Ohio Nevada Nevada Nevada
DataFrame name속성 설정하기
df3.index.name = 'year'; df3.columns.name= 'state'
df3
Out[54]:
state nevada ohio
year
2001 2.4 1.7
2002 2.9 3.6
2000 NaN 1.5
'python3' 카테고리의 다른 글
파이썬(Python3)Pandas 핵심 기능들(2) (0) | 2023.01.13 |
---|---|
파이썬(Python3) Pandas 핵심 기능(1) (2) | 2023.01.10 |
파이썬(Python3) 7가지 별 찍기 (0) | 2023.01.07 |
파이썬(Python3) 구구단 출력 프로그램 (0) | 2023.01.07 |