๐Ÿผ Pandas Cheat Sheet

import pandas as pd | 2026 Updated

1๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ƒ์„ฑ

# Series (1D)
s = pd.Series([3,-5,7],
  index=['a','b','c'])

# DataFrame (2D)
data = {'์ด๋ฆ„': ['๊น€','์ด','๋ฐ•'],
        '๋‚˜์ด': [25,30,28],
        '์ ์ˆ˜': [90,85,95]}
df = pd.DataFrame(data)
#    ์ด๋ฆ„ ๋‚˜์ด ์ ์ˆ˜
# 0  ๊น€   25   90
# 1  ์ด   30   85
# 2  ๋ฐ•   28   95

2I/O (์ฝ๊ธฐ/์“ฐ๊ธฐ)

# CSV
df = pd.read_csv('f.csv',
  encoding='utf-8', header=0)
df.to_csv('out.csv', index=False)

# Excel
df = pd.read_excel('f.xlsx',
  sheet_name='Sheet1')
df.to_excel('out.xlsx')

# JSON
df = pd.read_json('f.json')

# SQL
df = pd.read_sql(query, engine)

3๊ธฐ๋ณธ ์ •๋ณด ํ™•์ธ

๋ฉ”์„œ๋“œ์„ค๋ช…
df.head(n) .tail(n)์ฒ˜์Œ/๋งˆ์ง€๋ง‰ nํ–‰
df.shape(ํ–‰์ˆ˜, ์—ด์ˆ˜)
df.info()ํƒ€์ž…, ๋„ ์š”์•ฝ
df.describe()๊ธฐ์ˆ ํ†ต๊ณ„
df.dtypes์—ด๋ณ„ ๋ฐ์ดํ„ฐํƒ€์ž…
df.columns / .index์—ด๋ช… / ์ธ๋ฑ์Šค
df.count() .nunique()๋น„๊ฒฐ์ธก/๊ณ ์œ ๊ฐ’ ์ˆ˜
df['c'].value_counts()๊ฐ’๋ณ„ ๋นˆ๋„

4์„ ํƒ & ์ธ๋ฑ์‹ฑ

# ์—ด ์„ ํƒ
df['์ด๋ฆ„']            # Series
df[['์ด๋ฆ„','๋‚˜์ด']]   # DataFrame

# loc: ๋ผ๋ฒจ ๊ธฐ๋ฐ˜
df.loc[0,'์ด๋ฆ„']
df.loc[0:2,['์ด๋ฆ„','์ ์ˆ˜']]

# iloc: ์œ„์น˜(์ •์ˆ˜) ๊ธฐ๋ฐ˜
df.iloc[0,0]
df.iloc[0:2, 0:2]

# ๋ถˆ๋ฆฌ์–ธ ์ธ๋ฑ์‹ฑ
df[df['๋‚˜์ด'] > 25]
df[(df['๋‚˜์ด']>25) & (df['์ ์ˆ˜']>85)]
df[df['์ด๋ฆ„'].isin(['๊น€','๋ฐ•'])]
df.query('๋‚˜์ด>25 and ์ ์ˆ˜>85')

5๋ฐ์ดํ„ฐ ์ •์ œ (๊ฒฐ์ธก/์ค‘๋ณต)

# ๊ฒฐ์ธก์น˜
df.isnull().sum()       # ์—ด๋ณ„ ๊ฒฐ์ธก
df.dropna()             # ๊ฒฐ์ธก ํ–‰ ์‚ญ์ œ
df.dropna(axis=1)      # ๊ฒฐ์ธก ์—ด ์‚ญ์ œ
df.fillna(0)            # 0์œผ๋กœ ์ฑ„์›€
df.fillna(method='ffill')# ์•ž๊ฐ’
df.fillna(df.mean())   # ํ‰๊ท 

# ์ค‘๋ณต
df.duplicated()
df.drop_duplicates()

# ํƒ€์ž… ๋ณ€ํ™˜
df['๋‚˜์ด'].astype(int)
# ์ด๋ฆ„ ๋ณ€๊ฒฝ / ๊ฐ’ ์น˜ํ™˜
df.rename(columns={'๋‚˜์ด':'age'})
df.replace({'๊น€':'Kim'})

6์—ด ์ถ”๊ฐ€/์‚ญ์ œ/๋ณ€ํ™˜

# ์ถ”๊ฐ€
df['๋“ฑ๊ธ‰'] = ['A','B','A']
df['๋น„์œจ'] = df['์ ์ˆ˜']/df['๋‚˜์ด']

# ์‚ญ์ œ
df.drop(columns=['๋“ฑ๊ธ‰'])
df.drop([0,2])  # ํ–‰ ์‚ญ์ œ

# apply (ํ•จ์ˆ˜ ์ ์šฉ)
df['์ ์ˆ˜'].apply(lambda x: x*1.1)
df.apply(lambda x: x.max()-x.min())

# map (Series ๋งคํ•‘)
df['๋“ฑ๊ธ‰'].map({'A':4,'B':3})

7์ •๋ ฌ & ํ†ต๊ณ„

# ์ •๋ ฌ
df.sort_values('๋‚˜์ด')
df.sort_values('์ ์ˆ˜',ascending=False)
df.sort_values(['๋“ฑ๊ธ‰','์ ์ˆ˜'])
df.nlargest(3,'์ ์ˆ˜')  # ์ƒ์œ„3
ํ†ต๊ณ„ ๋ฉ”์„œ๋“œ์„ค๋ช…
.sum() .mean()ํ•ฉ๊ณ„ / ํ‰๊ท 
.median() .std()์ค‘์•™๊ฐ’/ํ‘œ์ค€ํŽธ์ฐจ
.min() .max()์ตœ์†Œ / ์ตœ๋Œ€
.cumsum()๋ˆ„์ ํ•ฉ
.corr()์ƒ๊ด€ํ–‰๋ ฌ
.describe()๊ธฐ์ˆ ํ†ต๊ณ„ ์ „์ฒด
.rank()์ˆœ์œ„

8GroupBy (๊ทธ๋ฃน ์—ฐ์‚ฐ)

g = df.groupby('๋“ฑ๊ธ‰')
g.mean()          # ๊ทธ๋ฃน๋ณ„ ํ‰๊ท 
g.size()          # ๊ทธ๋ฃน๋ณ„ ํฌ๊ธฐ
g.describe()      # ๊ธฐ์ˆ ํ†ต๊ณ„

# ๋‹ค์ค‘ ํ‚ค
df.groupby(['๋“ฑ๊ธ‰','์„ฑ๋ณ„']).mean()

# agg: ๋‹ค์–‘ํ•œ ์ง‘๊ณ„
g.agg({'์ ์ˆ˜':['mean','max'],
      '๋‚˜์ด':'min'})

# transform: ์›๋ž˜ ํฌ๊ธฐ ์œ ์ง€
g['์ ์ˆ˜'].transform(
  lambda x:(x-x.mean())/x.std())

# filter: ์กฐ๊ฑด ๊ทธ๋ฃน๋งŒ
g.filter(lambda x: x['์ ์ˆ˜'].mean()>85)

9๋ณ‘ํ•ฉ & ๊ฒฐํ•ฉ

# merge (SQL JOIN)
pd.merge(df1, df2, on='key')
pd.merge(df1, df2,
  left_on='a', right_on='b',
  how='left')
# how: inner outer left right

# concat (๋‹จ์ˆœ ๊ฒฐํ•ฉ)
pd.concat([df1, df2])       # ์„ธ๋กœ
pd.concat([df1,df2],axis=1)# ๊ฐ€๋กœ

# join (์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜)
df1.join(df2, how='outer')

10ํ”ผ๋ฒ— & ๋ฆฌ์…ฐ์ดํ”„

# pivot_table
pd.pivot_table(df,
  values='์ ์ˆ˜', index='๋“ฑ๊ธ‰',
  columns='์„ฑ๋ณ„', aggfunc='mean')

# melt (wide โ†’ long)
pd.melt(df, id_vars=['์ด๋ฆ„'],
  value_vars=['๊ตญ์–ด','์˜์–ด'])

# stack/unstack
df.stack()    # ์—ดโ†’ํ–‰
df.unstack()  # ํ–‰โ†’์—ด

# ๋”๋ฏธ๋ณ€์ˆ˜
pd.get_dummies(df['๋“ฑ๊ธ‰'])

11๋ฌธ์ž์—ด (.str ์ ‘๊ทผ์ž)

df['์ด๋ฆ„'].str.upper()
df['์ด๋ฆ„'].str.contains('๊น€')
df['์ด๋ฆ„'].str.replace('๊น€','Kim')
df['์ด๋ฆ„'].str.split(' ')
df['์ด๋ฆ„'].str.len()
df['์ด๋ฆ„'].str.strip()
df['์ด๋ฆ„'].str.lower()
df['์ด๋ฆ„'].str.startswith('๊น€')

12๋‚ ์งœ/์‹œ๊ฐ„ (.dt ์ ‘๊ทผ์ž)

df['๋‚ ์งœ'] = pd.to_datetime(df['๋‚ ์งœ'])
df['๋…„']  = df['๋‚ ์งœ'].dt.year
df['์›”']  = df['๋‚ ์งœ'].dt.month
df['์š”์ผ'] = df['๋‚ ์งœ'].dt.day_name()

# ๋‚ ์งœ ๋ฒ”์œ„
pd.date_range('2026-01-01',
  periods=30, freq='D')

# ๋ฆฌ์ƒ˜ํ”Œ๋ง
df.resample('M').mean()   # ์›”๋ณ„
df.resample('W').sum()    # ์ฃผ๋ณ„