λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» Programming/Python

[pandas] DataFrame μ„€λͺ… | 데이터 μ‘°μž‘, 필터링, μ‹œκ°ν™”, 톡계 뢄석

by 뭅즀 2023. 11. 16.
λ°˜μ‘ν˜•

 

νŒλ‹€μŠ€(Pandas)

 


νŒλ‹€μŠ€(Pandas)λŠ” νŒŒμ΄μ¬μ—μ„œ 데이터 μ‘°μž‘κ³Ό 뢄석을 μœ„ν•œ 라이브러리둜, 특히 ν‘œ ν˜•μ‹μ˜ 데이터λ₯Ό 닀루기에 μš©μ΄ν•˜λ‹€. νŒλ‹€μŠ€μ˜ μ£Όμš” 자료ꡬ쑰인 λ°μ΄ν„°ν”„λ ˆμž„(DataFrame)은 ν–‰κ³Ό μ—΄λ‘œ 이루어진 ν…Œμ΄λΈ” ν˜•μ‹μ˜ 데이터λ₯Ό 닀루기 μœ„ν•œ 자료ꡬ쑰둜 데이터λ₯Ό λ‹€λ£° λ•Œ 자주 μ‚¬μš©λœλ‹€.

λ°μ΄ν„°ν”„λ ˆμž„ 생성

import pandas as pd

# 2차원 리슀트둜 λ°μ΄ν„°ν”„λ ˆμž„ 생성
data = [
    ['Alice', 25, 'New York'],
    ['Bob', 30, 'San Francisco'],
    ['Charlie', 35, 'Los Angeles']
]

df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])
  • νŒλ‹€μŠ€μ˜ pd.DataFrame() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°ν”„λ ˆμž„μ„ 생성할 수 μžˆλ‹€.
  • 일반적으둜 2차원 리슀트, λ”•μ…”λ„ˆλ¦¬, λ„˜νŒŒμ΄ λ°°μ—΄ 등을 μ΄μš©ν•˜μ—¬ λ°μ΄ν„°ν”„λ ˆμž„μ„ λ§Œλ“ λ‹€.

 

 

λ°μ΄ν„°ν”„λ ˆμž„ κΈ°λ³Έ 정보 확인

# λ°μ΄ν„°ν”„λ ˆμž„μ˜ 처음 5개 ν–‰ 좜λ ₯
print(df.head())

# λ°μ΄ν„°ν”„λ ˆμž„μ˜ κΈ°λ³Έ 정보 좜λ ₯
print(df.info())

# λ°μ΄ν„°ν”„λ ˆμž„μ˜ 톡계적 μš”μ•½ 좜λ ₯
print(df.describe())
  • head(), tail(), info(), describe() λ“±μ˜ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°ν”„λ ˆμž„μ˜ 일뢀 λ°μ΄ν„°λ‚˜ κΈ°λ³Έ 정보λ₯Ό 확인할 수 μžˆλ‹€.

 

 

인덱슀 및 μ—΄ μ‘°μž‘

# 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • ν–‰ 선택
row = df.loc[0]

# μ—΄μ˜ 이름을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • μ—΄ 선택
column = df['Name']
  • 인덱슀(index)λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°ν”„λ ˆμž„μ˜ νŠΉμ • 행을 μ„ νƒν•˜κ±°λ‚˜, μ—΄μ˜ 이름을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • 열을 선택할 수 μžˆλ‹€.

 

 

쑰건 검색과 필터링

# 쑰건 검색
filtered_df = df[df['Age'] > 30]

# μ—¬λŸ¬ 쑰건 κ²°ν•©
filtered_df = df[(df['Age'] > 30) & (df['City'] == 'San Francisco')]
  • 쑰건을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • 쑰건을 λ§Œμ‘±ν•˜λŠ” 행을 κ²€μƒ‰ν•˜κ±°λ‚˜, μ—¬λŸ¬ 쑰건을 κ²°ν•©ν•˜μ—¬ 데이터λ₯Ό 필터링할 수 μžˆλ‹€.
  • 사싀상 이런 데이터 ν•„ν„°λ§μ΄λ‚˜ 검색을 μœ„ν•΄ λ°μ΄ν„°ν”„λ ˆμž„μ„ μ‚¬μš©ν•œλ‹€κ³  보면 λœλ‹€.
  • λ¦¬μŠ€νŠΈμ—μ„œ 인덱슀 λ³„λ‘œ μˆœνšŒν•˜λ©΄μ„œ 데이터λ₯Ό ν•„ν„°λ§ν•˜λ©΄ μ‹œκ°„μ΄ ꡉμž₯히 였래 걸리고 μ—¬λŸ¬ 쑰건을 ν•œ λ²ˆμ— ν•„ν„°λ§ν•˜κΈ°λ„ κΉŒλ‹€λ‘­μ§€λ§Œ, λ°μ΄ν„°ν”„λ ˆμž„μ„ μ‚¬μš©ν•˜λ©΄ 간단해 진닀.

 

λ°μ΄ν„°ν”„λ ˆμž„ - 리슀트 λ³€ν™˜

import pandas as pd

# μƒ˜ν”Œ λ°μ΄ν„°ν”„λ ˆμž„ 생성
data = {'A': [1, 2, 3], 'B': ['a', 'b', 'c']}
df = pd.DataFrame(data)

# λ°μ΄ν„°ν”„λ ˆμž„μ„ 리슀트둜 λ³€ν™˜
list_from_df = df.values.tolist()

# κ²°κ³Ό 좜λ ₯
print(list_from_df)

# μƒ˜ν”Œ 리슀트 생성
list_data = [[1, 'a'], [2, 'b'], [3, 'c']]

# 리슀트λ₯Ό λ°μ΄ν„°ν”„λ ˆμž„μœΌλ‘œ λ³€ν™˜
df_from_list = pd.DataFrame(list_data, columns=['A', 'B'])

# κ²°κ³Ό 좜λ ₯
print(df_from_list)
  • λ°μ΄ν„°ν”„λ ˆμž„ → 리슀트
    • df.valuesλŠ” λ°μ΄ν„°ν”„λ ˆμž„μ˜ 값듀을 NumPy λ°°μ—΄λ‘œ λ°˜ν™˜ν•˜κ³ , tolist() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 이λ₯Ό 파이썬 리슀트둜 λ³€ν™˜
  • 리슀트 → λ°μ΄ν„°ν”„λ ˆμž„
    • pd.DataFrame() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 리슀트λ₯Ό λ°μ΄ν„°ν”„λ ˆμž„μœΌλ‘œ λ³€ν™˜
    • columns λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄ 이름을 지정할 수 있음

 

파일 μž…μΆœλ ₯

# CSV 파일둜 μ €μž₯
df.to_csv('output.csv', index=False)

# CSV 파일 읽기
new_df = pd.read_csv('output.csv')
  • νŒλ‹€μŠ€λŠ” λ‹€μ–‘ν•œ 데이터 ν˜•μ‹μœΌλ‘œ λ°μ΄ν„°ν”„λ ˆμž„μ„ μ €μž₯ν•˜κ³  읽을 수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.
  • to_csv(), to_excel(), read_csv(), read_excel() λ“±μ˜ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 μž…μΆœλ ₯이 κ°€λŠ₯ν•˜λ‹€.

 


 

νŒλ‹€μŠ€ λ°μ΄ν„°ν”„λ ˆμž„μ€ 데이터 μ‘°μž‘, 필터링, μ‹œκ°ν™”, 톡계 뢄석 λ“± λ‹€μ–‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데에 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©λ˜λŠ” κ°•λ ₯ν•œ 도ꡬ이기에 ν•œλ²ˆ μ―€ μ‚¬μš©λ²•μ„ μ΅ν˜€λ‘λ©΄ μ–Έμ  κ°€ μ“Έλͺ¨κ°€ μžˆλ‹€ !

λ°˜μ‘ν˜•