import pandas as pd
s = pd.Series(["apple", "banana", "cherry"])
# 문자열 길이
print(s.str.len())
# 0 5
# 1 6
# 2 6
# dtype: int64
# 소문자를 대문자로
print(s.str.upper())
# 0 APPLE
# 1 BANANA
# 2 CHERRY
# dtype: object
# 특정 패턴 포함 여부
print(s.str.contains("an"))
# 0 False
# 1 True
# 2 False
# dtype: bool
s = pd.to_datetime(pd.Series(["2025-01-01", "2025-09-30"]))
print(s.dt.year) # 연도 추출
print(s.dt.strftime("%Y/%m/%d")) # 원하는 포맷으로 문자열 변환
s = pd.Series(["a", "b", "a", "c"], dtype="category")
print(s.cat.codes) # 각 카테고리의 코드 번호
print(s.cat.categories) # 카테고리 목록
print(s.cat.remove_unused_categories()) # 안 쓰는 카테고리 제거
s = pd.Series([0, 0, 1, 0], dtype="Sparse[int]")
print(s.sparse.density) # 실제 데이터 중 0이 아닌 값의 비율
print(s.sparse.to_dense()) # 일반 시리즈로 변환
s = pd.Series([1, 2, 3])
print(s.array) # <PandasArray>
print(s.array[0]) #
context length

✅ 정리
이 표는 “모델을 실행하려면 GPU VRAM과 SSD를 얼마나 준비해야 하는지”를 보여줍니다.

scp -r edu013@158.247.210.130:/tmp/data .
(-r 옵션을 줘야 한다.)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte
df = pd.read_csv("data/국민건강보험공단_진료내역정보_2024.CSV", encoding="cp949")


a,b,c, *d = [1,2,2,3,4,12,312,3,21,3,123,21,3,13] # d 는 unpack 하고 나머지 값이 리스트화됨
print(d)
#11. 수치형 변수를 가진 컬럼을 출력하라.
dd.select_dtypes(include=['number'])
#12. 범주형 변수를 가진 컬럼을 출력하라.
dd.select_dtypes(include=["object"]).columns
# 컬럼별 결측치 개수 확인
print(df.isnull().sum())
# 전체 결측치 개수
print(df.isnull().sum().sum()


IQR = dd['평균 속도'].quantile(0.75) - dd['평균 속도'].quantile(0.25)
즉, quantile(0.75) 값에서 quantile(0.25) 값을 빼면 됩니다.
result = dc[mask].reset_index(drop=True)
print(result)

ALTER TABLE usa_health_data
ADD CONSTRAINT unique_patient_record UNIQUE (name, date_of_admission, doctor);
CREATE UNIQUE INDEX IF NOT EXISTS ux_usa_health_unique
ON public.usa_health_data (name, date_of_admission, doctor);
insert_sql = """
INSERT INTO use_heath_data (
name, age, gender, blood_type, medical_condition,
date_of_admission, doctor, hospital, insurance_provider,
billing_amount, room_number, admission_type,
discharge_date, medication, test_results
)
VALUES (
%s, %s, %s, %s, %s,
%s, %s, %s, %s,
%s, %s, %s,
%s, %s, %s
)
ON CONFLICT (name, date_of_admission, doctor) DO NOTHING
RETURNING id;
"""CREATE TABLE IF NOT EXISTS usa_health_data (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age INT,
gender VARCHAR(20),
blood_type VARCHAR(10),
medical_condition VARCHAR(255),
date_of_admission DATE,
doctor VARCHAR(100),
hospital VARCHAR(100),
insurance_provider VARCHAR(100),
billing_amount DOUBLE PRECISION,
room_number VARCHAR(50),
admission_type VARCHAR(50),
discharge_date DATE,
medication VARCHAR(255),
test_results VARCHAR(255),
CONSTRAINT unique_patient_record UNIQUE (name, date_of_admission, doctor)
);import os
import pandas as pd
import psycopg2
from psycopg2.extras import execute_batch
from dotenv import load_dotenv
load_dotenv()
db_config = {
'host': os.getenv("DB_HOST"),
'port': 5432,
'database': os.getenv('DB_NAME'),
'user': os.getenv('DB_USER'),
'password': os.getenv('DB_PASS'),
}
conn = None
cursor = None
try:
# DB 연결
conn = psycopg2.connect(**db_config)
cursor = conn.cursor()
# 엑셀 로드 & 컬럼명 정리
df = pd.read_excel("data/USA_healthcare_dataset.xlsx")
df.rename(columns=lambda x: x.strip().lower().replace(" ", "_"), inplace=True)
# 타입 변환: DB에 맞게 맞춤
df["date_of_admission"] = pd.to_datetime(df["date_of_admission"]).dt.date # date
df["discharge_date"] = pd.to_datetime(df["discharge_date"]).dt.date # date
df["room_number"] = df["room_number"].astype(str) # varchar
df["age"] = df["age"].astype(int) # int4
df["billing_amount"] = df["billing_amount"].astype(float) # float8
insert_sql = """
INSERT INTO usa_health_data (
name, age, gender, blood_type, medical_condition,
date_of_admission, doctor, hospital, insurance_provider,
billing_amount, room_number, admission_type,
discharge_date, medication, test_results
)
VALUES (
%s, %s, %s, %s, %s,
%s, %s, %s, %s,
%s, %s, %s,
%s, %s, %s
)
ON CONFLICT (name, date_of_admission, doctor) DO NOTHING
RETURNING id;
"""
# 튜플 데이터 준비
rows_to_insert = [
(
r["name"], r["age"], r["gender"], r["blood_type"], r["medical_condition"],
r["date_of_admission"], r["doctor"], r["hospital"], r["insurance_provider"],
r["billing_amount"], r["room_number"], r["admission_type"],
r["discharge_date"], r["medication"], r["test_results"]
)
for _, r in df.iterrows()
]
# 대량 insert
execute_batch(cursor, insert_sql, rows_to_insert, page_size=2000)
conn.commit()
# 최근 10개 데이터 조회
cursor.execute("""
SELECT id, name, age, gender, medical_condition
FROM usa_health_data
ORDER BY id DESC
LIMIT 10;
""")
recent = cursor.fetchall()
print("최근 10개 데이터")
for row in recent:
print(row)
except Exception as e:
print("에러 발생:", e)
finally:
if cursor:
cursor.close()
if conn:
conn.close()
print("DB 연결이 종료되었습니다.")
#### 20. 넘파이에 & | 연산 할때 연산자 우선순위가 낮아서, 각 조건을 갈호로 묶어 줘야함
```python
mask = dc.item_name == 'Steak Salad' | dc.item_name == 'Bowl' (틀림)
mask = (dc.item_name == 'Steak Salad') | (dc.item_name == 'Bowl') (맞음)
mask = dc.item_name.isin(['Steak Salad', 'Bowl']) (이런방식도 있다)
#33. df의 item_name 컬럼 값이 streak salad or bowl인 데이터를 데이터 프레임화한후
# item_name을 기준으로 중복행이 있으면 제거하되, 첫번째 케이스만 남겨라.
dc[dc.item_name.isin(['Steak Salad', 'Bowl'])].
drop_duplicates(subset='item_name', keep='first')
# item_name 하나만 기준
df.drop_duplicates(subset="item_name", keep="first")
# item_name + doctor 두 컬럼을 기준
df.drop_duplicates(subset=["item_name", "doctor"], keep="first")
df['choice_description'] = df['choice_description'].fillna("NoData")
df.loc[df['choice_description'].isna(), 'choice_description'] = "NoData"

