AI(ML & DL)

[기계학습] Python Pandas 란 ?? ( 2 )

ch010104 2025. 4. 4. 13:47

1. 열 삭제 - del

import pandas as pd
import numpy as np

# DataFrame
data = {
    'year': [2000, 2001, 2002, 2001, 2002, 2003, 2002, 2003, 2004],
    'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada', 'NY', 'NY', 'NY'],
    'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2, 8.3, 8.4, 8.5],
    'debt': [np.nan] * 9
}
index = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
frame2 = pd.DataFrame(data, index=index)

# frame2
#        year  state   pop  debt
# one    2000   Ohio   1.5   NaN
# two    2001   Ohio   1.7   NaN
# three  2002   Ohio   3.6   NaN
# four   2001 Nevada   2.4   NaN
# five   2002 Nevada   2.9   NaN
# six    2003 Nevada   3.2   NaN
# seven  2002     NY   8.3   NaN
# eight  2003     NY   8.4   NaN
# nine   2004     NY   8.5   NaN

del frame2['Ohio state'] # 'Ohio state' 열을 삭제

print(frame2.columns)
# Index(['year', 'state', 'pop', 'deft'], dtype='object')
 
  • 삭제하려는 인덱스 'Ohio state' 가 있을 경우, 해당 열이 삭제됨.
  • 없을 경우, 에러 발생

2. 특정 행만 인덱싱 ('one', 'three', 'five')

 
print(frame2.loc['three']) # 특정 index의 행만 반환 

# year     2002
# state    Ohio
# pop       3.6
# Name: three, dtype: object

print(frame2.loc[['three', 'four']])

#        year  state   pop
# three  2002   Ohio   3.6
# four   2001 Nevada   2.4

3. 열 업데이트 (브로드캐스팅)

frame2['debt'] = 16.5
print(frame2)

#        year  state   pop  debt
# one    2000   Ohio   1.5  16.5
# two    2001   Ohio   1.7  16.5
# three  2002   Ohio   3.6  16.5
# four   2001 Nevada   2.4  16.5
# five   2002 Nevada   2.9  16.5
# six    2003 Nevada   3.2  16.5
# seven  2002     NY   8.3  16.5
# eight  2003     NY   8.4  16.5
# nine   2004     NY   8.5  16.5

 


4. 각 행별로 다른 값 할당

frame2['debt'] = np.arange(9.)
print(frame2)

#        year  state   pop  debt
# one    2000   Ohio   1.5   0.0
# two    2001   Ohio   1.7   1.0
# three  2002   Ohio   3.6   2.0
# four   2001 Nevada   2.4   3.0
# five   2002 Nevada   2.9   4.0
# six    2003 Nevada   3.2   5.0
# seven  2002     NY   8.3   6.0
# eight  2003     NY   8.4   7.0
# nine   2004     NY   8.5   8.0

5. Series로 부분 업데이트

val = pd.Series([-1.2, -1.5, -1.7, 2.2], index=['two', 'four', 'five', 'eleven'])
frame2['debt'] = val
print(frame2)

#        year  state   pop  debt
# one    2000   Ohio   1.5   NaN
# two    2001   Ohio   1.7  -1.2
# three  2002   Ohio   3.6   NaN
# four   2001 Nevada   2.4  -1.5
# five   2002 Nevada   2.9  -1.7
# six    2003 Nevada   3.2   NaN
# seven  2002     NY   8.3   NaN
# eight  2003     NY   8.4   NaN
# nine   2004     NY   8.5   NaN

6. 열 / 인덱스 존재 여부 확인 - in 연산자

print('year' in frame2.columns)
print('ten' in frame2.index)

# True
# False

7. head / tail 메서드

# frame2
#        year  state   pop  debt
# one    2000   Ohio   1.5   NaN
# two    2001   Ohio   1.7   NaN
# three  2002   Ohio   3.6   NaN
# four   2001 Nevada   2.4   NaN
# five   2002 Nevada   2.9   NaN
# six    2003 Nevada   3.2   NaN
# seven  2002     NY   8.3   NaN
# eight  2003     NY   8.4   NaN
# nine   2004     NY   8.5   NaN

print(frame2.head(3)) # frame2를 앞에서부터 3개 출력

#        year  state  pop  debt
# one    2000   Ohio  1.5   NaN
# two    2001   Ohio  1.7  -1.2
# three  2002   Ohio  3.6   NaN

print(frame2.head()) # 기본 5개를 출력함.

#        year  state   pop  debt
# one    2000   Ohio   1.5   NaN
# two    2001   Ohio   1.7  -1.2
# three  2002   Ohio   3.6   NaN
# four   2001 Nevada   2.4  -1.5
# five   2002 Nevada   2.9  -1.7

print(frame2.tail(3)) # frame2를 뒤에서부터 3개 출력

#        year state  pop  debt
# seven  2002    NY  8.3   NaN
# eight  2003    NY  8.4   NaN
# nine   2004    NY  8.5   NaN

print(frame2.tail()) # 기본 5개를 출력함.

#        year  state  pop  debt
# five   2002 Nevada  2.9  -1.7
# six    2003 Nevada  3.2   NaN
# seven  2002     NY  8.3   NaN
# eight  2003     NY  8.4   NaN
# nine   2004     NY  8.5   NaN
 

8. 전치 (Transpose)

frame3 = pd.DataFrame({
    'Nevada': {2001: 2.4, 2002: 2.9, 2000: 1.7},
    'Ohio': {2000: 1.5, 2001: 3.6}
})
print(frame3)

#        Nevada  Ohio
# 2001     2.4   3.6
# 2002     2.9   NaN
# 2000     1.7   1.5

print(frame3.T)

#         2001  2002  2000
# Nevada   2.4   2.9   1.7
# Ohio     3.6   NaN   1.5

9. 실습

# 실습

1. frame2에 대해 row index one, three, five 행들만을 출력하는 코드를 작성해보세요.
2. frame2에 대해 Nevada 주만의 데이터를 출력하는 코드를 작성해보세요.
3. frame2에 대해 결측치가 존재하는 행들의 인덱스를 출력하는 코드를 작성해보세요.
4. frame2에 index six와 ten 인 행이 존재하는지를 확인하는 코드를 작성해보세요.

# 1 번
print(frame2.loc[['one', 'three', 'five']]) 
print("--------------------------------")
# 2 번
print(frame2[frame2['state'] == 'Nevada']) # frame2['state'] == 'Nevada'는 bool 타입의 True 반환
print("--------------------------------")
# 3 번
print(frame2[frame2.isnull().any(axis=1)].index)
print("--------------------------------")
# 4 번
print("six index 존재 여부:", 'six' in frame2.index)
print("ten index 존재 여부:", 'ten' in frame2.index)

#       year   state  pop  debt
# one   2000    Ohio  1.5   NaN
# three 2002    Ohio  3.6   NaN
# five  2002  Nevada  2.9  -1.7
# --------------------------------
#       year   state  pop  debt
# four  2001  Nevada  2.4  -1.5
# five  2002  Nevada  2.9  -1.7
# six   2003  Nevada  3.2   NaN
--------------------------------
# Index(['one', 'three', 'six', 'seven', 'eight', 'nine'], dtype='object')
--------------------------------
# six index 존재 여부: True
# ten index 존재 여부: False