#0.PANDAS란
-파이썬환경에서 데이터프레임을 제공하고, 파이썬언어로 데이터프레임 상의 데이터를 다루고 통계처리를 가능케 해주는 라이브러리.
-단순화해 말하자면 파이썬 상의 엑셀. 파이썬 상의 SQL 데이터베이스 등으로 생각하면 된다. 나는 판다스가 SQL보다 훨씬 직관적이고 명료화 되어 있다고 느꼈다.
-컴활 공부를 해봤거나 SQLD(P)를 준비해봤다거나 한다면 개념화하는데 수월할 듯 하다.
-데이터 관련 공부를 해보니 판다스를 모르면 안됨. (PANDAS, NUMPY, MATPLOTLIB은 필수)
#1.PANDAS의 기능/특징
*1-1 해당 데이터 타입에 상관없이 결측 데이터를 쉽게 처리할 수 있다. (실제 데이터셋을 보면 부분 부분 빠진 데이터가 있는데 판다스로 이런 결측데이터를 쉽게 처리할 수 있다.)
*1-2 데이터 셋의 형태를 쉽게 다룰 수 있다. 특정한 행과 열을 쉽게 빼거나 더할 수 있다. 결합/분할 용이.
*1-3 데이터 정렬을 자의적으로 조정할 수 있다. 특정 데이터 속성(열)을 기준으로 정렬할 수 있다.
*1-4 데이터의 기술통계(집계)에 관한 기능들을 제공한다
*1-5 그룹바이가 가능하다. (그룹별로 묶어 집계하는 방식)
*1-6 다른 데이터 구조에서 판다스 데이터프레임구조로 변환이 자유롭고, 그 반대도 그러함. (ex. csv파일은 ;으로 열을 구분하는데 이 csv파일을 엑셀로 변환하면 ;을 포함해 한 데이터의 모든 속성이 한 셀에 들어옴..., 그렇기 때문에 csv파일을 ;기준으로 판다스 데이터프레임으로 변환한뒤 다시 xlsx파일로 변환하면 정상적인 데이터셋의 형태를 갖추게 됨.)(사실 엑셀에 ;을 기준으로 셀을 나누는 자체기능이 있는 것으로 알고있음..)
*1-7 시계열 데이터 다루기가 쉽다.
#2. PANDAS vs NUMPY
(사실 판다스는 넘파이 기반으로 만들어진 데이터베이스 셋이다.)
-판다스는 데이터테이블을 처리하고 가공하는데 기능이 특화된 라이브러리. (그냥 내가 볼땐 sql이다)
-넘파이는 벡터/선형대수연산, 다차원배열(ndarray)기능을 제공하는 것에 특화된 라이브러리이다. 그래서 굳이 따지자면 넘파이는 데이터테이블을 다루는 라이브러리는 아니다.
-그렇기 때문에 판다스는 서로다른 데이터 타입들을 담을 수 있고, 넘파이는 불가능. 데이터타입이 다르면 선형대수 연산에 문제가 생기니까.
#3.PANDAS 객체
판다스는 크게 Series와 Data Frame객체(혹은 자료구조)로 이루어짐.
*3-1 Series
판다스에서 1차원 데이터구조를 다룰 때 사용.
시리즈 자료형은 백터화연산이 가능하다.
라벨 : 인덱스에 이름을 붙일 수 있고 이 이름을 라벨이라고함. 혹은 인덱스의 값을 라벨이라함.딕셔너리와 비슷.
라벨이 있더라도 인덱스로 슬라이싱/인덱싱가능. 딕셔너리와 비슷하고 실제로 dict를 시리즈로 바꾸면 키값이 라벨로 자동으로 적용됨.
#series객체
s_0 = pd.Series([1, 0.2, 0.3, 4, 5])
print(s_0)
>>>
0 1.0
1 0.2
2 0.3
3 4.0
4 5.0
dtype: float64
print(type(s_0)) #판다스.시리즈 객체의 타입은?
>>>
<class 'pandas.core.series.Series'>
print(s_0.values) #시리즈의 값들
>>>
[1. 0.2 0.3 4. 5. ]
print(s_0.index) #시리즈의 인덱스들
>>>
RangeIndex(start=0, stop=5, step=1) #디폴트
print(s_0[1:3]) #판다스 시리즈의 슬라이싱
>>>
1 0.2
2 0.3
dtype: float64
#라벨은 range가 디폴트.
s_0 = pd.Series([1, 0.2, 0.3, 4, 5], index = ['q', 'w', 'e', 'r', 'd'])
print(s_0)
>>>
q 1.0
w 0.2
e 0.3
r 4.0
d 5.0
dtype: float64
print(s_0['q': 'e']) #range슬라이싱과 다르다.
>>>
q 1.0
w 0.2
e 0.3
dtype: float64
print(s_0[1: 4]) #인덱스로 슬라이싱 가능.
>>>
w 0.2
e 0.3
r 4.0
dtype: float64
#고유한 값들만 출력해줌.
print(s_0.unique())
>>
[1. 0.2 0.3 4. 5. ]
#각 데이터들의 속성(값)들의 총개수
print(s_0.value_counts())
>>>
1.0 1
0.2 1
0.3 1
4.0 1
5.0 1
dtype: int64
print(s_0.isin([0.3, 6]))
>>>
q False
w False
e True
r False
d False
dtype: bool #데이터타입 : bool
#딕셔너리 시리즈로 변환. 키값들은 자동 라벨화.
pp_dict = {"서울_특별시" : 80000000,
"부산_광역시" : 35000000,
"대구_광역시" : 25000000,
"인천_광역시" : 25000000}
pp_ser = pd.Series(pp_dict)
print(pp_ser)
>>>
서울_특별시 80000000
부산_광역시 35000000
대구_광역시 25000000
인천_광역시 25000000
dtype: int64
*3-2 DataFrame
데이터프레임 객체는 행과 열을 가진 2차원 배열구조(테이블)이다.
파이썬으로 만들 수도 있고 csv파일이나 엑셀파일을 불러와 만들 수 도 있다.
행은 각각의 데이터이고 열은 해당 데이터의 속성이다.
데이터프레임 객체도 열에 라벨(이름)을 붙일 수 있고 행 인덱스에 라벨를 설정할 수 있다.
*딕셔너리로 데이터프레임을 만들 때 key값은 반드시 열이 된다.(딕셔너리 벨류안에 딕셔너리가 있으면?? 당연히 안쪽 딕셔너리 key값은 열이 될 수 없으니 행의 인덱스가 된다.)
#1
#딕셔너리로 데이터프레임을 만들면 키값은 열 이름으로 벨류값은 값으로 들어감.
df_0 = pd.DataFrame([{'A' : 1, 'B' : 2, 'D' :3}, {'A' :1, 'B' : 2, 'C' :3}])
print(df_0)
#비어 있는 누락값은 NaN으로 들어감. 판다스는 누락값 처리에 강함.
>>>
A B D C
0 1 2 3.0 NaN
1 1 2 NaN 3.0
#2
df_1 = pd.DataFrame({'num' : [1,2,3,4],
'국가': ['미국', '일본', '한국', '영국'],
'환율':[1200, 100, 1000,1500],
'공항': ['시카고','하네다','인천', '히드로']})
print(df_1)
>>>
num 국가 환율 공항
0 1 미국 1200 시카고
1 2 일본 100 하네다
2 3 한국 1000 인천
3 4 영국 1500 히드로
#3
pp_all_dict = {"서울_특별시" : 80000000,
"부산_광역시" : 35000000,
"대구_광역시" : 25000000,
"인천_광역시" : 25000000}
pp_male_dict = {"서울_특별시" : 40000000,
"부산_광역시" : 20000000,
"대구_광역시" : 15000000,
"인천_광역시" : 15000000}
pp_female_dict = {"서울_특별시" : 40000000,
"부산_광역시" : 15000000,
"대구_광역시" : 10000000,
"인천_광역시" : 10000000}
population_k = pd.DataFrame({'인구수' : pp_all_dict,
'남성' : pp_male_dict,
'여성' : pp_female_dict})
print(population_k)
>>>
인구수 남성 여성
서울_특별시 80000000 40000000 40000000
부산_광역시 35000000 20000000 15000000
대구_광역시 25000000 15000000 10000000
인천_광역시 25000000 15000000 10000000
print(population_k.index)
print(population_k.columns)
>>>
Index(['서울_특별시', '부산_광역시', '대구_광역시', '인천_광역시'], dtype='object')
Index(['인구수', '남성', '여성'], dtype='object')
print(population_k['남성']) #남성의 인구수만 출력
>>>
서울_특별시 40000000
부산_광역시 20000000
대구_광역시 15000000
인천_광역시 15000000
Name: 남성, dtype: int64
'DS > 데이터-PANDAS' 카테고리의 다른 글
| PANDAS ST4 특정 행/열 위치교환 (0) | 2022.09.17 |
|---|---|
| PANDAS ST3 멀티 인덱스(다중 인덱스)2, names (0) | 2022.05.23 |
| PANDAS ST3 멀티 인덱스(다중 인덱스)1 (0) | 2022.05.23 |
| PANDAS ST2 인덱싱(특정 행/열 선택, 추출, 라벨추출, 값만 추출) (0) | 2022.05.23 |
| PANDAS ST1 Index(색인)객체 (0) | 2022.05.21 |