Skip to content

Commit bcff900

Browse files
committed
fix: SegmentTable 중복 컬럼명 ShapeError (#17)
연결/개별 재무제표 부문이 같은 이름으로 반복될 때 Polars DataFrame 생성 시 중복 컬럼 거부 → ShapeError. 중복 컬럼명에 접미사(_2, _3...) 부여하여 해결.
1 parent f91e105 commit bcff900

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

  • src/dartlab/providers/dart/docs/finance/segment

src/dartlab/providers/dart/docs/finance/segment/types.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,39 @@ class SegmentTable:
2121
aligned: bool
2222

2323
def toDataFrame(self) -> pl.DataFrame:
24-
"""테이블 → DataFrame (행=항목명, 열=부문/지역/제품)."""
24+
"""테이블 → DataFrame (행=항목명, 열=부문/지역/제품).
25+
26+
중복 컬럼명(연결/개별 반복) 처리: 접미사(_2, _3...) 부여.
27+
"""
2528
import polars as pl
2629

2730
nCols = min(len(self.columns), min(len(v) for v in self.rows.values()) if self.rows else 0)
2831
if nCols == 0:
2932
return pl.DataFrame()
3033

31-
data: dict[str, list] = {"계정명": []}
34+
# 중복 컬럼명에 접미사 부여
35+
uniqueCols: list[str] = []
36+
seen: dict[str, int] = {}
3237
for i in range(nCols):
33-
data[self.columns[i]] = []
38+
name = self.columns[i]
39+
if name in seen:
40+
seen[name] += 1
41+
uniqueCols.append(f"{name}_{seen[name]}")
42+
else:
43+
seen[name] = 1
44+
uniqueCols.append(name)
45+
46+
data: dict[str, list] = {"계정명": []}
47+
for col in uniqueCols:
48+
data[col] = []
3449

3550
for name in self.order:
3651
vals = self.rows.get(name)
3752
if vals is None:
3853
continue
3954
data["계정명"].append(name)
4055
for i in range(nCols):
41-
data[self.columns[i]].append(vals[i] if i < len(vals) else None)
56+
data[uniqueCols[i]].append(vals[i] if i < len(vals) else None)
4257

4358
return pl.DataFrame(data)
4459

0 commit comments

Comments
 (0)