# 1. 형식 후처리 import pandas as pd def rearrange_csv(csv_path: str): """ CSV 파일을 읽어 열 순서를 변경하고 원본 파일에 덮어쓰기 저장한다. 변경사항: - NAME 뒤에 ID 열 배치 - ID → TICKER 로 컬럼명 변경 - 원본 csv_path에 덮어쓰기 """ # 1. CSV 읽기 df = pd.read_csv(csv_path) # 2. ID → TICKER 로 컬럼명 변경 df = df.rename(columns={"ID": "TICKER"}) # 3. NAME 뒤에 TICKER 배치 desired_order = ["NAME", "TICKER"] + [col for col in df.columns if col not in ["NAME", "TICKER"]] df = df[desired_order] # 4. 원본 파일 덮어쓰기 df.to_csv(csv_path, index=False, encoding="utf-8-sig") print(f"[완료] 열 순서 변경 및 저장 완료 → {csv_path}") rearrange_csv("ETF.csv") # 2. COMPANY 열 한국어로 변경 import pandas as pd from pykrx import stock def convert_company_to_korean(csv_path: str): df = pd.read_csv(csv_path) skipped_rows = [] # 무시된 row 전체 저장 (출력용) def get_korean_name(ticker: str): try: code = ticker.split(".")[0] name = stock.get_market_ticker_name(code) # pykrx 조회 실패 → None 또는 빈 문자열 if not isinstance(name, str) or name.strip() == "": return None return name except: return None # 새 COMPANY 값 생성 df["NEW_COMPANY"] = df["TICKER"].apply(get_korean_name) # 잘못된 row 추출 skipped_df = df[df["NEW_COMPANY"].isna()] skipped_rows = skipped_df.to_dict(orient="records") # 정상 row만 남김 df = df[df["NEW_COMPANY"].notna()].copy() # COMPANY 업데이트 df["COMPANY"] = df["NEW_COMPANY"] df.drop(columns=["NEW_COMPANY"], inplace=True) # CSV 저장 df.to_csv(csv_path, index=False, encoding="utf-8-sig") print(f"[완료] 한국어 기업명 변환 완료 → {csv_path}") # 무시된 행 출력 print(f"\n[무시된 행 개수] {len(skipped_rows)}개") if skipped_rows: print("[무시된 데이터 목록]") for idx, row in enumerate(skipped_rows, 1): print(f"{idx}. {row}") convert_company_to_korean("ETF.csv")