Blair  - Soul Eater 3. 데이터 분석을 위한 핵심 Tool Python(김상모 강사님)_14

• 패스트캠퍼스 데이터분석 부트캠프 12기

3. 데이터 분석을 위한 핵심 Tool Python(김상모 강사님)_14

oujin 2024. 1. 15. 11:25
728x90

▶ 판다스

시리즈는 일차원 배열, 데이터프레임은 2차원 배열

시리즈를 합쳐서 데이터 프레임을 만들 수 있다.

import pandas as pd 로 불러온다.

 

#판다스, 데이터 프레임 생성
s = pd.Series([9904312,3454845,2351565,1425362],
             index = ['서울','부산','인천','대구'])

 

표이름, 인덱스이름 설정

s.name='인구 분석' #표이름
s.index.name = '도시' #인덱스 이름
print(s)
print(s.name)
print(s.index.name)

실행결과  

도시
서울    9904312
부산    3454845
인천    2351565
대구    1425362
Name: 인구 분석, dtype: int64
인구 분석
도시

 

  데이터프레임 연산

s / 1000000
#s값이 수치이므로 1000000으로 나눈 값으로 출력됨 (연산가능)

 

 

▶  시리즈 슬라이싱

s # 시리즈는 기본적으로 넘파이 배열이기 때문에 인덱스(숫자)로도 슬라이싱 가능하고 인덱스의 값으로도 가능.
print(s[1])
print( s['부산'])
print(s[3])
print(s['대구'])

실핼결과 ↓

3454845
3454845
1425362
1425362

 

▶ 특정열만 슬라이싱

s[[0,3,1]]

실핼결과 

도시
서울    9904312
대구    1425362
부산    3454845
Name: 인구 분석, dtype: int64

 

250e4 =

2500000.0

 

 

▶ 특정 값 기준으로 슬라이싱

s[(250e4<s) & (s <500e4)] #인구가 250만 초과, 500만 미만인 경우

 

도시
부산    3454845
Name: 인구 분석, dtype: int64

 

# 시리즈는 딕셔너리와 비슷
# 라벨값에 의ㅐ해 인덱싱이 가능라므로 실질적으로 인덱스 라벨 값을 키로 가지는 딕셔너리와 비슷
# 시리즈는 기본덕으로 넘파이 기반이지만 딕셔너리 구조로 이루엊져 잇어

 

▶ 값이 있는지 확인

"서울" in s

 

데이터프레임 키, 값 출력 1

for data in s.items():
    print(data)
('서울', 9904312)
('부산', 3454845)
('인천', 2351565)
('대구', 1425362)

 

 데이터프레임 키, 값 출력 2

for k,v in s.items():
    print("%s = %d" %(k,v))
서울 = 9904312
부산 = 3454845
인천 = 2351565
대구 = 1425362

 

 

딕셔너리로 만든것과 indes지정해서 만든것의 차이점

s2 = pd.Series({"서울":9631482, "부산":3393191, "인천":2632035,"대전":1490158})
s2

s2 = pd.Series({"서울":9631482, "부산":3393191, "인천":2632035,"대전":1490158},
              index = ['부산','서울','인천','대전'])
s2

 

서울    9631482
부산    3393191
인천    2632035
대전    1490158
dtype: int64

 

부산    3393191
서울    9631482
인천    2632035
대전    1490158
dtype: int64

 

▶ notnull()

ds = s-s2
ds
ds.notnull()
ds[ds.notnull()]

실행결과↓

대구         NaN
대전         NaN
부산     55546.0
서울    272830.0
인천    258416.0
dtype: float64
대구    False
대전    False
부산     True
서울     True
인천     True
dtype: bool
부산     55546.0
서울    272830.0
인천    258416.0
dtype: float64

 

인구증가율 보기

rs = (s-s2)/s2*100
rs = rs[rs.notnull()]
rs
부산    1.636984
서울    2.832690
인천    9.818107
dtype: float64

 

값 변경

rs['부산'] = 1.63
rs
부산    1.630000
서울    2.832690
인천    9.818107
dtype: float64

 

값 추가 

rs['대구'] = 1.41
rs
부산    1.630000
서울    2.832690
인천    9.818107
대구    1.410000
dtype: float64

 

 

값 삭제

del rs["서울"]
rs

부산    1.630000
인천    9.818107
대구    1.410000
dtype: float64

 

데이터프레임 연산

a= pd.Series([1,2,3],index = ['일','이','삼'])
b= pd.Series([1,2,5],index = ['일','이','오'])
print(a,b)

aa= pd.Series({'A':10,'B':20,'C':30})
bb= pd.Series({'B':5,'C':15,'D':25})
print(aa,bb)

 

리스트를 사용하여 데이터프레임 생성

data = [['John',28,'Male'],
       ['Kate',23,'Female'],
       ['David',31,'Male'],
       ['Emily',27,'Female']]
columns = ["Name",'Age','Dender']
df = pd.DataFrame(data,columns=columns)
print(df)
    Name  Age  Dender
0   John   28    Male
1   Kate   23  Female
2  David   31    Male
3  Emily   27  Female

 

values, columns,index 확인하

print(df.values)
print(df.columns)
print(df.index)
[['John' 28 'Male']
 ['Kate' 23 'Female']
 ['David' 31 'Male']
 ['Emily' 27 'Female']]
Index(['Name', 'Age', 'Dender'], dtype='object')
RangeIndex(start=0, stop=4, step=1)

 

데이터프레임 슬라이싱

print(df['Name'])
0     John
1     Kate
2    David
3    Emily
Name: Name, dtype: object
print(df['Name'][0])
John

 

 

컬럼 미작성시 0,1,2,...로 설정됨

data0 = [['John',28,'Male'],
       ['Kate',23,'Female'],
       ['David',31,'Male'],
       ['Emily',27,'Female']]
df0 = pd.DataFrame(data0)
print(df0)
print(data0[0])
       0   1       2
0   John  28    Male
1   Kate  23  Female
2  David  31    Male
3  Emily  27  Female
['John', 28, 'Male']

 

인덱스와 컬럼에 이름 붙이기

df.index.name = '도시'
df.columns.name = '특성'
df

 

평균 컬럼 추가하기

data = {
    "이름": ["홍길동", "전우치", "심청이", "철수", "영희"],
    "국어": [95, 90, 85, 93, 87],
    "영어": [90, 87, 93, 94, 89],
    "수학": [73, 95, 87, 89, 93],
}
columns = ["이름", "국어", "영어", "수학"]
index = ["1번", "2번", "3번", "4번", "5번"]

df_ex = pd.DataFrame(data, index=index, columns=columns)
print(df_ex)
print()
df_ex['평균'] = (df_ex['국어'] + df_ex['영어'] +df_ex['수학'])/3
print(df_ex)
     이름  국어  영어  수학
1번  홍길동  95  90  73
2번  전우치  90  87  95
3번  심청이  85  93  87
4번   철수  93  94  89
5번   영희  87  89  93

     이름  국어  영어  수학         평균
1번  홍길동  95  90  73  86.000000
2번  전우치  90  87  95  90.666667
3번  심청이  85  93  87  88.333333
4번   철수  93  94  89  92.000000
5번   영희  87  89  93  89.666667
 

 

2005-2010 증가율 이라는 이름의 열 추가

df["2005-2010 증가율"] = ((df["2010"]-df["2005"]) / df["2005"]*100).round(2)
df

728x90