본문 바로가기
First step/AI 기초반

[TIL] 21.07.13pandas 사용,

by Joshua21 2021. 7. 13.

#pandas

import pandas as pd

s=pd.Series([9904312,3448737,2890451,2466052], index=['서울','부산','인천','대구'])

print(s)

 

시리즈연산 

Numpy 배열 처럼 시리즈도 벡터화 연산을 할수 있다 다만 연산은 시리지의 값에만 적용 되며 인덱스 값은변하지 않는다 예를 들어 인구숫자를 백만다누이로 만들기 위해 시리즈 객체를1,000,000으로 나누어도 인덱스 라벨에는 영향을 미치지않는것을 볼수있다,

s/1000000

 

(250e4<s) & (s<500e4) #Name: 인구, dtype: bool

 

s[(250e4<s) & (s<500e4)] #Name: 인구, dtype: int64

 

s['부산':'대구'#문자로 인덱싱 할떄는 마지막 인덱스 포함

 

for k,v in s.items(): 

  print('%s= %d'%(k,v)) #k=keays v=values

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

 

ds= s-s2 #pandas로 구성한 데이터끼리 뺼셈 가능

 

예시에서는 대구,대전의경우 2010년 2015년 자료가 모두 존재하지 않기떄문에 계산이 불가능하므로 Nan 이라는 값을 가지게된다 또한 nan값이 flpat자료형에서만 가능하므로다른 계산 결과도 모두 float 자료형이 되었다는점에 주의한다 

ds.notnull()#null 아닌위치에 True

 

rs=(s-s2)/s2 *100

rs=rs[rs.notnull()]

 

#연습문제

 

data={

    '2015':[9904312,3448737,2890451,2466052],

      '2010':[9631482,3393191,2632035,2431774],

      '2005':[9762546,3512547,2517680,2456016],

      '2000':[9853972,3655437,2466338,2473990],

      '지역':['수도권','경상권','수도권','경상권'],

      '2010-2015 증가율':[0.0283,0.0163,0.0982,0.0141]

      }

columns=['지역','2015','2010','2005','2000','2010-2015 증가율']

index=['서울','부산','인천','대구']

 

df=pd.DataFrame(data, index=index, columns=columns)

print(df) #

 

df.T # 열과 행을 바꾸어 출력

 

print(type(df['2015'])) #열방향인덱싱

print((df['2015'].shape))

df['2015']

 

데이터 프레임의 열 인덱스가 문자열 라벨을가지고 있는 경우에는순서를 나타내는 정수인덱스를 열인덱싱에 사용할수 없다. 정수인덱싱의 슬라리스는 행(row)을 인덱싱할떄 사용하므로 열을 인덱싱 할때는 쓸수 없다.

다만 원래부터 문자열이 아닌 정수형 열 인덱스를 가지는 경우에는 인덱스 값으로 정수를 사용할수있다,

 

import numpy as np

df2=pd.DataFrame(np.arange(12).reshape(3,4))

df2

 

print(type(df.iloc[2]))

df.iloc[2# iloc 시리즈로 출력하기

 

#csv파일 만들기

%%writefile sample1.csv 

c1,c2,c3

1,1.11,done

2,2.22,two

3,3.33,three

 

pd.read_csv('sample1.csv',index_col='c1')#테이블 내의 특정한 열을 행 인덱스로 지정하고 싶으면

 

 

%%writefile smaple3.txt

c1        c2        c3        c4

0.179181 -1.538472  1.347553  0.43381

1.024209  0.087307 -1.271997  0.49265

0.417899 -2.002308  0.255245 -1.10515

pd.read_table('smaple3.txt', sep='\s+')#구분자는 스페이스바 테이플로 표시

 

%%writefile sample4.csv 

c1,c2,c3

1,1.11,one

2, ,two

누락,3.33,three

#특정 문자열을 nan으로 표시

df=pd.read_csv('sample4.csv', na_values=['누락'])

#구분자 | 를 넣어서 출력

df.to_csv('sample7.txt',sep='|')

 

df.to_csv('sample8.txt', na_rep='missing')

#인덱스 a,b,c 붙임

df.index=['a','b','c']

 

#pandas 로 웹에서 데이터 불러오기

df_titanic=pd.read_csv('https://raw.githubusercontent.com/datascienceschool/docker_rpython/master/data/titanic.csv')

 

df_titanic.head() #처음 5개만 불러오기

df_titanic.tail(3) #끝 3만 불러오기

df_titanic.tail()#끝 5개만 불러오기