# 📌 Pandas 데이터 선택하기 (행, 열, 조건 등) 튜토리얼
import pandas as pd
# 샘플 데이터 생성
data = {
"이름": ["홍길동", "김철수", "이영희", "박지수"],
"나이": [25, 30, 28, 22],
"도시": ["서울", "부산", "대구", "서울"],
"연봉": [5000, 6000, 5500, 4800],
}
df = pd.DataFrame(data)
print(df)
# 1️⃣ 특정 열(컬럼) 선택
## ✅ 단일 열 선택
print(df["이름"]) # 시리즈 형태로 반환
print(df.이름) # 점(.) 표기법으로 접근
## ✅ 여러 열 선택
print(df[["이름", "연봉"]]) # 데이터프레임 형태로 반환
# 2️⃣ 특정 행 선택
## ✅ 인덱스로 행 선택 (iloc - 정수 위치 기반)
print(df.iloc[0]) # 첫 번째 행 선택
print(df.iloc[1:3]) # 1~2번째 행 선택 (슬라이싱)
## ✅ 라벨로 행 선택 (loc - 라벨 기반)
print(df.loc[0]) # 첫 번째 행 선택 (인덱스 번호가 0)
print(df.loc[1:3]) # 1~3번 인덱스의 행 선택 (슬라이싱 포함)
# 3️⃣ 조건을 이용한 행 선택
## ✅ 특정 조건에 맞는 데이터 선택
print(df[df["나이"] > 25]) # 나이가 25세 초과인 행 선택
print(df[df["도시"] == "서울"]) # 도시가 서울인 데이터 선택
## ✅ 여러 조건 적용 (AND: &, OR: |)
print(df[(df["나이"] > 25) & (df["도시"] == "서울")]) # 나이가 25세 초과 & 도시가 서울
print(df[(df["나이"] < 30) | (df["연봉"] > 5000)]) # 나이가 30 미만 OR 연봉이 5000 초과
## ✅ 조건 부합하지 않는 데이터 선택 (~ 연산자 사용)
print(df[~(df["도시"] == "서울")]) # 도시가 서울이 아닌 데이터
# 4️⃣ 특정 행과 열 동시 선택
## ✅ iloc을 이용한 특정 행, 열 선택 (정수 위치 기반)
print(df.iloc[0, 1]) # 첫 번째 행, 두 번째 열 값 (홍길동의 나이)
print(df.iloc[1:3, [0, 2]]) # 1~2번째 행의 1, 3번째 열 선택
## ✅ loc을 이용한 특정 행, 열 선택 (라벨 기반)
print(df.loc[0, "나이"]) # 첫 번째 행, '나이' 컬럼 선택
print(df.loc[:, ["이름", "연봉"]]) # 모든 행의 특정 컬럼 선택
# 5️⃣ 특정 컬럼 값 변경하기
## ✅ 단일 값 변경
df.loc[0, "연봉"] = 5200 # 홍길동의 연봉 변경
## ✅ 특정 조건을 만족하는 값 변경
df.loc[df["도시"] == "부산", "연봉"] = 6200 # 도시가 부산인 사람의 연봉 6200으로 변경
# 6️⃣ 인덱스 설정 및 재설정
## ✅ 특정 컬럼을 인덱스로 설정
df.set_index("이름", inplace=True)
print(df)
## ✅ 인덱스 초기화
df.reset_index(inplace=True)
print(df)
# 7️⃣ 데이터 샘플링 (일부 데이터 선택)
## ✅ 상위 N개 데이터 선택
print(df.head(2)) # 상위 2개 행 출력
print(df.tail(2)) # 하위 2개 행 출력
## ✅ 랜덤 샘플 데이터 선택
######################
교재
######################
# Pandas를 이용한 'datasets/winequality-white.csv' 데이터 선택 튜토리얼
import pandas as pd
# 1. CSV 파일 읽기
file_path = 'datasets/winequality-white.csv'
wine_data = pd.read_csv(file_path, sep=";") # 구분자가 세미콜론(;)일 경우
# 2. 특정 열 선택
quality_data = wine_data['quality'] # 'quality' 열 선택
selected_columns = wine_data[['quality', 'pH']] # 'quality'와 'pH' 열 선택
# 3. 데이터프레임의 일부 행 선택
top_10_rows = wine_data[:10] # 상위 10개 행 선택
print(top_10_rows)
# 4. 특정 행과 열 선택
value = wine_data.iloc[0, 1] # 첫 번째 행, 두 번째 열 데이터
print(value)
print(wine_data.iloc[0]) # 첫 번째 행 선택
print(wine_data.iloc[10:15]) # 10번째부터 14번째 행 선택
print(wine_data.iloc[0, 1]) # 첫 번째 행, 두 번째 열 값
print(wine_data.iloc[5:10, [0, 2]]) # 5~9번째 행의 1, 3번째 열 선택
# 5. 특정 행을 기준으로 선택 (loc)
print(wine_data.loc[0]) # 첫 번째 행 선택 (인덱스 기준)
print(wine_data.loc[5:10]) # 5~10번 인덱스의 행 선택
print(wine_data.loc[0, "density"]) # 첫 번째 행, 'density' 컬럼 값
print(wine_data.loc[:, ["alcohol", "quality"]]) # 모든 행의 특정 컬럼 선택
# 6. 특정 값 변경
wine_data.loc[0, "quality"] = 9 # 첫 번째 행의 품질 점수를 9로 변경
# 7. 조건을 이용한 데이터 선택
value = wine_data.loc[0, 'quality'] # 첫 번째 행에서 'quality' 열의 값 선택
print(value)
high_quality = wine_data[wine_data['quality'] >= 7] # 품질이 7 이상인 데이터 선택
print(high_quality.head())
print(wine_data[wine_data["alcohol"] > 10]) # 알코올 함량이 10 이상인 와인
print(wine_data[wine_data["quality"] == 8]) # 품질 점수가 8인 와인
# 8. 여러 조건을 만족하는 데이터 선택
high_quality_alcohol = wine_data[(wine_data['quality'] >= 8) & (wine_data['pH'] >= 3)]
print(high_quality_alcohol.head())
print(wine_data[(wine_data["alcohol"] > 10) & (wine_data["quality"] >= 7)]) # 알코올 > 10 & 품질 >= 7
print(wine_data[(wine_data["alcohol"] > 9) | (wine_data["density"] < 1)]) # 알코올 > 9 OR 밀도 < 1
# 9. 특정 조건을 만족하는 값 변경
wine_data.loc[wine_data["quality"] == 5, "alcohol"] = wine_data["alcohol"] + 0.5 # 품질 점수 5인 와인의 알코올 함량 증가
print(wine_data[~(wine_data["quality"] == 5)]) # 품질 점수가 5가 아닌 와인
# 10. 랜덤 샘플 선택
print(wine_data.sample(5)) # 랜덤으로 5개 행 선택