Pandas = Panel Datas
= Series나 table 형태로 데이터를 나타낼 수 있다. 이러한 데이터를 다루기 위한 클래스를 제공하는 패키지
Series class
= NumPy에서 제공하는 1차원 배열과 그 모양이 비슷하다. 하지만 배열과 다르게 index를 추가하여 index와 value를 가지는 배열을 말한다.
- Series 객체 생성시 첫 인수로 data, 두 번째 인수로 idnex를 넣는다.
- data값으로 iterable,배열,scalar value, dict(key와 index를 동일하게 사용하거나 생략)를 사용할 수 있다.
- index는 data와 length가 동일해야한다.
- label 이 꼭 유일(unique)할 필요는 없다.
- index는 hashable 한 type만 올 수 있다.
import pandas as pd
series = pd.Series(['one','two','three',"four","five","six","seven",'eight','nine','ten'],index=range(1,11))
print(series)
s = pd.Series([9_904_312, 3_448_737, 2_890_451, 2_466_052],
index=["서울", "부산", "인천", "대구"])
print(s,end="\\n\\n")
print(s.index)
print(s.values,end='\\n\\n')
s.name = "인구"
s.index.name = "도시"
print(s)
dict로 Series생성하기
d = {'a':1,'b':2,'c':3}
ser = pd.Series(d) # 또는 ser = pd.Series(data=d,index=d.keys())
print(ser)
ser = pd.Series(data=d,index=['x','y','z'])
# index로 주어진 값의 key값에 대응하는 value값을 주기 때문에 없는값이라서 NaN을 넣어준다.
print(ser)
Series index를 속성처럼 활용하기
- index 값이 영문 문자열인 경우에는 index label이 속성인 것처럼 마침표(.)를 활용하여 해당 index값에 접근 가능
ser.x
Series의 특징
- 딕셔너리 자료형과 비슷한 특징을 가짐
- in연산가능
- items() 메서드를 사용해 각 요소의 key, value에 접근 가능
- 딕셔너리의 원소는 순서를 가지지 않으므로 시리즈의 데이터도 순서가 보장되지 않는다.
- 만약 순서를 가지도록 하기 위해서는 Series선언 시에 index에서 리스트로 순서를 지정해주어야 한다.
print("서울" in s)
print("대전" in s)
for k,v in s.items():
print(k,":",v)
indexing + slicing
print(s[0], s[1], s['인천'],end="\\n\\n")
print(s[[0,3,1]],end="\\n\\n")
print(s[1:2],end="\\n\\n") # 끝값 [2]포함하지 않는다.
print(s['부산':'대구'],end="\\n\\n") # 끝값(대구)도 포함한다.
#문자는 초과하는 범위를 표현할 수 없어서 (초과하는 문자가 뭐냐고 물어보면 답할수가 없음) 끝을 포함시킨다는 다른점이 있다.
print(s[(250e4 < s) & (s < 500e4)],end="\\n\\n") # 인구가 250만 초과, 500만 미만인 경우
시리즈 연산
- NumPy 배열처럼 벡터화 연산을 할 수 있다.
- 다만 values에만 연산이 적용되고 index는 변하지 않는다.
- 시리즈끼리 연산을 하는 경우 인덱스가 같은 데이터에 대해서만 차이를 구한다.
print(s/10000,end ='\\n\\n')
sd = pd.Series([55546,272830,258416,1490158],index = ['부산','서울','인천','대전'])
ds = s-sd
print(ds,end ='\\n\\n')
print(ds.notnull(),end ='\\n\\n') # NaN값에 대한 여부를 확인가능
print(ds[ds.notnull()],end ='\\n\\n')#notnull()응용
# NaN 값을 갖기 위해선 자료형이 float형이어야 해서 int끼리 연산해도 float형으로 저장된다.
print(ds[ds > 9000000]) # 이런 연산도 가능함.
print(ds)
del ds['대구']
del ds['대전']
ds['부산'] = 1.4
ds
#연습문제
fin1 = {'카카오':60010,'삼성전자':61000,'LG전자':90000}
fin2_value = [60200,61200,200100]
fi2_index = ['카카오','삼성전자','네이버']
ser_finance1 = pd.Series(fin1)
ser_finance2 = pd.Series(data = fin2_value, index = fi2_index)
print(ser_finance1,ser_finance2,sep="\\n\\n",end = "\\n\\n")
result = ser_finance1 - ser_finance2
print(result[result.notnull()])
'파이썬 > Pandas' 카테고리의 다른 글
6. Pandas 추가 메서드 - 3 (0) | 2023.05.02 |
---|---|
5.Pandas 추가 메서드 - 2 (0) | 2023.05.02 |
4.Pandas 추가 메서드 - 1 (0) | 2023.05.02 |
3.Pandas - DataFrame - 2 (1) | 2023.05.02 |
2.Pandas - DataFrame - 1 (0) | 2023.05.02 |