파일 불러오기
import pandas as pd
import seaborn as sns
data = sns.load_dataset("tips") # seaborn에 존재하는 tips 이라는 dataset load
data.to_csv("tips_data.csv") # tips 를 tip_data.csv로 이 폴더에 저장하겠음
df = pd.read_csv("tips_data.csv") # df = tips_data.csv 를 읽겠음
print(df)

인덱스 생성하지 않기
# 방법1
data.to_csv("tips_data.csv", index=False)
df = pd.read_csv("tips_data.csv")
# 방법2
data.to_csv("tips_data.csv")
df = pd.read_csv("tips_data.csv", index_col=0)

DataFrame 생성
df = pd.DataFrame({
"A" : [1, 2, 3],
"B" : ["A", "B", "C"]
}, index= ["idx3", "idx2", "idx1"]) # df라는 데이터프레임 생성
print(df)

df.loc["idx2"] # 2번째 행에 대한 정보를 다 가져와라

df.sort_index() # 순서 정렬

df.set_index("A") # 인덱스 지정 A라는 컬럼을 인덱스로 쓰겠다

df.index = ["ㄱ", "ㄴ", "ㄷ"] # 인덱스 지정

df.reset_index(drop=True) # 지정한 인덱스 사라지고, 원래의 정수 값의 인덱스 지정

🔰 컬럼
data = {
"name" : ["Alice", "Bob", "Charlie"],
"age" : ["25", "30", "35"],
"gender" : ["female", "male", "male"]
}
df = pd.DataFrame(data) # data 라는 DataFrame 생성

df["name"] # name 컬럼만 출력

df.columns = ["이름", "나이", "성별"] # 컬럼명 변경

Rename
df = df.rename(columns={"이름" : "name", "나이" : "age"}) # 컬럼명 변경
df["스포츠"] = "축구" # 컬럼 추가

del df["스포츠"] # 스포츠 컬럼 삭제

🔰 데이터 확인
df.head() # 상위 5개 확인
df.tail() # 하위 5개 확인
df.info() # 데이터프레임의 정보. 컬럼명, 데이터타입, null값 얼마나 있는지
df.describe() # 기초통계량 확인. 숫자타입 컬럼만 출력됨

.isna()
None값 찾기
df = pd.DataFrame({
"A" : [1, 2, 3, 4],
"B" : [5, 6, 7, None]
})
df.isna() # None 값 찾기. None값은 True

df[df["B"].isna()] # B컬럼에서 None값 있는 인덱스 출력

.astype()
데이터타입 변환
df["total_bill"] = df["total_bill"].astype(str) # total_bill 컬럼 데이터타입 str로 변환
df.info()
df["total_bill"].astype(float).astype(int) # 소수점을 정수로 바꾸기

🔰 데이터 선택
.iloc[]
파이썬 숫자 슬라이싱과 동일. 끝 값 포함❌
df = pd.DataFrame({
"A" : [1, 2, 3, 4, 5],
"B" : [10, 20, 30, 40, 50],
"C" : [100, 200, 300, 400, 500]
})
df.iloc[:] # 전체 인덱스 값들 불러옴
df.iloc[0] # 0번째 인덱스 값들 불러옴
df.iloc[0:3] # 0~2번 인덱스 값들 불러옴
df.iloc[0:5:2] # 0~4번 인덱스 값 2씩 건너뛰고 불러옴
df.iloc[1, 0:2] # 1번 인덱스에서 0~2컬럼의 값 불러옴

.loc[]
인덱스 값으로 슬라이싱. 끝 값 포함⭕
df = pd.DataFrame({
"A" : [1, 2, 3, 4, 5],
"B" : [10, 20, 30, 40, 50],
"C" : [100, 200, 300, 400, 500],
}, index=["aa", "bb", "cc", "dd", "ee"])
df
df.loc["bb":, "B"] # bb인덱스~마지막 인덱스까지 B컬럼 값 출력
df.loc["bb":"dd", "A":"C"] # bb인덱스~dd인덱스까지 A~C 컬럼 값 출력
df.loc[:"cc", ["C","A"]] # 처음부터~cc인덱스까지 C컬럼, A컬럼 출력

df[["B", "A"]] # loc, iloc 없이 [] 로 출력하기. A, B 컬럼 순서 바꿔서 출력

🔰 불리언 인덱싱
AND( & ) OR( | )
df = pd.read_csv("tips_data.csv" index_col=0)
df[(df["sex"]=="Female") & (df["smoker"] == "Yes")]
df[(df["size"] > 5) | (df["size"] < 2)]

.isin()
특정 컬럼에서 특정 값만 출력
df[df["day"].isin(["Sun", "Thur"])] #day 컬럼에서 Sun, Thur 값만 추출

df["revenue"] = df["total_bill"] + df["tip"] # revenue란 컬럼 추가

🔰 데이터 병합
concat
아래로 병합
df1 = pd.DataFrame({
"A" : ["A0", "A1", "A2", "A3"],
"B" : ["B0", "B1", "B2", "B3"],
"C" : ["C0", "C1", "C2", "C3"],
"D" : ["D0", "D2", "D2", "D3"]
})
df2 = pd.DataFrame({
"A" : ["A4", "A5", "A6", "A7"],
"B" : ["B4", "B5", "B6", "B7"],
"C" : ["C4", "C5", "C6", "C7"],
"D" : ["D4", "D5", "D6", "D7"]
})
df3 = pd.DataFrame({
"A" : ["A8", "A9", "A10", "A11"],
"B" : ["B8", "B9", "B10", "B11"],
"C" : ["C8", "C9", "C10", "C11"],
"D" : ["D8", "D9", "D10", "D11"]
})
pd.concat([df1, df2, df3]) # 아래로 병합
pd.concat([df1, df2, df3]).reset_index(drop=True) # 인덱스정렬

concat(axis=1)
옆으로 병합
df1 = pd.DataFrame({
"A" : ["A0", "A1", "A2", "A3"],
"B" : ["B0", "B1", "B2", "B3"],
"C" : ["C0", "C1", "C2", "C3"],
"D" : ["D0", "D2", "D2", "D3"]
})
df2 = pd.DataFrame({
"A" : ["A4", "A5", "A6", "A7"],
"B" : ["B4", "B5", "B6", "B7"],
"C" : ["C4", "C5", "C6", "C7"],
"D" : ["D4", "D5", "D6", "D7"]
})
pd.concat([df1, df2], axis=1) # 옆으로 병합

merge()
디폴트값 : inner (innerjoin 과 동일)
how=”outer”
how=”left”
df11 = pd.DataFrame({
"key" : ["A", "B", "C", "D"],
"value" : [1, 2, 3, 4]
})
df22 = pd.DataFrame({
"key" : ["B", "D", "D", "E"],
"value" : [5, 6, 7, 8]
})
df11
df22

pd.merge(df11, df22, on="key") # on="컬럼명" 겹치는 데이터만 가져옴

pd.merge(df11, df22, on="key", how="outer") # 전체 데이터 출력

pd.merge(df11, df22, on="key", how="left") # 왼쪽 즉 df11 기준으로 데이터 출력

🔰 데이터 집계
groupby
df = pd.DataFrame({
"Category" : ["A", "B", "A", "B", "A", "B"],
"Value" : [1, 2, 3, 4, 5, 6]
})
df

df.groupby("Category").mean() # 각 category 별로 가지는 value들의 평균값
df.groupby("Category").sum() # 각 category 별로 가지는 value들의 합계
df.groupby("Category").count() # 각 category 별로 가지는 value들의 개수
df.groupby("Category").max() # 각 category 별로 가장 큰 수
df.groupby("Category").min() # 각 category 별로 가장 작은 수
df.groupby("Category").first() # 각 category 별로 첫번째 컬럼

df.groupby("Category").agg(list) # value 값이 리스트로 묶여서 출력

# day 별로 숫자형 데이터타입의 컬럼만 평균값 출력
df[["day", "total_bill", "tip", "size"]].groupby("day").mean()

# 성별 별로 요일 별로 숫자형 데이터타입의 컬럼 평균값 출력
df[["sex", "day", "total_bill", "tip", "size"]].groupby(["sex", "day"]).mean().round()

df[["sex", "day", "total_bill", "tip", "size"]].\
groupby(["day", "sex"]).\
agg({"total_bill" : "max", "tip" : "mean", "size" : "sum"})

🔰 Pivot
df = pd.DataFrame({
"Date" : ["2023-01-01", "2023-01-01", "2023-01-02", "2023-01-02", "2023-01-01"],
"Category" : ["A", "B", "A", "B", "A"],
"Value" : [10, 20, 30, 40, 50]
})
df

# 일자별로 각 카테고리의 value 값을 sum한 값 출력
pivot = df.pivot_table(index="Date", columns="Category", values="Value", aggfunc="sum")
pivot

3df = pd.DataFrame({
"Date" : ["2023-01-01", "2023-01-01", "2023-01-02", "2023-01-02", "2023-01-01"],
"Category" : ["A", "B", "A", "B", "A"],
"SubCategory" : ["X", "X", "Y", "Y", "X"],
"Value" : [10, 20, 30, 40, 50]
})
df

pivot = df.pivot_table(index="Date", columns=["Category", "SubCategory"], \
values="Value", aggfunc="sum")
pivot

🔰 정렬
df = pd.DataFrame({
"Name" : ["Alice", "Bob", "Charlie", "David", "Eva"],
"Age" : [25, 22, 30, 30, 18],
"Score" : [85, 88, 83, 90, 92]
})
df

sort_values
df.sort_values(by="Age") # Age 컬럼 기준 오름차순

# Age는 오름차순, Score는 내림차순
df.sort_values(by=["Age", "Score"], ascending=[True, False])

df.sort_index(ascending=False) # 인덱스 기준으로 내림차순

'Sparta > Theory' 카테고리의 다른 글
| [250916] 통계 01 - 분석방법 (0) | 2025.09.16 |
|---|---|
| [250901] pandas visualizer (0) | 2025.09.01 |
| [250829] 스파르타코딩 본캠프 19일차 (1) - pandas 02 (0) | 2025.08.29 |
| [250828] 스파르타코딩 본캠프 18일차 (1) - pandas 01 (2) | 2025.08.28 |
| [250825] 스파르타코딩 본캠프 15일차 (1) (1) | 2025.08.25 |