본문 바로가기
python3

파이썬(Python3) Pandas 핵심 기능(1)

by DongGoo 2023. 1. 10.

Pandas 핵심 기능들(1)

 

1. reindex

reindex를 호출하면 데이터를 새로운 index에 맞게 재 배열하고, 존재 하지 않은 index라면 NAN값으로 표시한다. method 옵션을 이용해 ffill 메서드를 활용해 누락된값을 직전의 값으로 채울 수 있다.

DataFrame에서 reindex는 row와 columns모두 변경 가능하다. DataFrame에서도 값의 이름이 다르면 NAN값으로 표시한다.

# DataFrame 생성
df = pd.DataFrame([4.5,9.0,1.0,-2.0],index = ['a','b','c','d'])
df
Out[60]: 
     0
a  4.5
b  9.0
c  1.0
d -2.0

# reindex
df.reindex(['c','a','b','d','e'])
Out[61]: 
     0
c  1.0
a  4.5
b  9.0
d -2.0
e  NaN

# 누락된 값 직전 값으로 채우기
df.reindex(['c','a','b','d','e'],method = 'ffill')
Out[75]: 
     0
c  1.0
a  4.5
b  9.0
d -2.0
e -2.0

# index와 columns한번에 변경
df.reindex(['하나',1,2],columns = ['공',1,2])
Out[87]: 
     공    1    2
하나 NaN  NaN  NaN
1  NaN  4.0  5.0
2  NaN  7.0  8.0

2. 하나의 row나 columns삭제하기

drop를 사용해서 index를 삭제할 경우 인자 없이 index리스트를 입력하면 되고, columns을 삭제해야 할 경우 aixs = 1 또는 axis = colums을 인자로 넘겨 주면 된다.

inplace인자를 True로 설정할 경우 삭제와 동시에 저장을 하기 때문에 유의해서 사용해야한다.

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)

# index를 삭제
df.drop([0,1,2])
Out[96]: 
    state  year  pop
3  Nevada  2001  2.4
4  Nevada  2002  2.9
5  Nevada  2003  3.2

# columns를 삭제
df.drop(['state'],axis = 'columns')
Out[97]: 
   year  pop
0  2000  1.5
1  2001  1.7
2  2002  3.6
3  2001  2.4
4  2002  2.9
5  2003  3.2

3. 색인하기, 선택하기, 거르기

비교를 통해 원하는 값을 변경할 수 있다.

df = pd.DataFrame(np.arange(16).reshape(4,4),
                  index = ['Ohio','colorado','utah','Nevada'],
                  columns = ['zero','one','two','three'])
df
Out[107]: 
          zero  one  two  three
Ohio         0    1    2      3
colorado     4    5    6      7
utah         8    9   10     11
Nevada      12   13   14     15

# columns name으로 추출
df['two']
Out[108]: 
Ohio         2
colorado     6
utah        10
Nevada      14
Name: two, dtype: int32

# 하나 이상의 columns name으로 추출
df[['zero','three']]
Out[109]: 
          zero  three
Ohio         0      3
colorado     4      7
utah         8     11
Nevada      12     15

# 두번째 index까지 추출
df[:2]
Out[110]: 
          zero  one  two  three
Ohio         0    1    2      3
colorado     4    5    6      7

# three컬럼의 값이 7초과인 값들
df[df['three']>7]
Out[112]: 
        zero  one  two  three
utah       8    9   10     11
Nevada    12   13   14     15

# bool로 표현하기
df <7
Out[113]: 
           zero    one    two  three
Ohio       True   True   True   True
colorado   True   True   True  False
utah      False  False  False  False
Nevada    False  False  False  False

# 조건에 맞는 값들 변경하기
df[df < 7] = 0
df
Out[115]: 
          zero  one  two  three
Ohio         0    0    0      0
colorado     0    0    0      7
utah         8    9   10     11
Nevada      12   13   14     15

3.1 loc와 iloc사용하기

축 이름을 선택할 땐 loc를, 정수로 추출 할 경우에는 iloc를 사용한다.

df
Out[142]: 
          zero  one  two  three
Ohio         0    1    2      3
colorado     4    5    6      7
utah         8    9   10     11
Nevada      12   13   14     15

df.loc['utah'] or df.iloc[2]
Out[143]: 
zero      8
one       9
two      10
three    11
Name: utah, dtype: int32

df.loc['utah',['one','two']] or df.iloc[2,[1,2]]
Out[144]: 
one     9
two    10
Name: utah, dtype: int32

# index가 처음부터 utah까지고 two인 열
df.loc[:'utah','two']
Out[148]: 
Ohio         2
colorado     6
utah        10
Name: two, dtype: int32

# 모든행이고 0번 부터 2번행 까지이고 two컬럼의 값이 8이상인것 
df.iloc[:,:3][df.two>7]
Out[149]: 
        zero  one  two
utah       8    9   10
Nevada    12   13   14

4. 주의사항

index가 숫자일경우 loc와iloc의 정수 색인시 추출 되는 값이 다르기 때문에 유의해서 사용해야한다.

df = pd.DataFrame(np.arange(16).reshape(4,4))
df.drop([1,2,3],axis=1,inplace=True)
df
Out[153]: 
    0
0   0
1   4
2   8
3  12

df.loc[:2]
Out[156]: 
   0
0  0
1  4
2  8

df.iloc[:2]
Out[157]: 
   0
0  0
1  4