Fix Tabular handling of explicitly selected falsy ID columns (#1332)

This commit is contained in:
HuaTNA
2026-10-03 19:14:23 -04:00
parent 893d0424be
commit 84aa1c81c7
2 changed files with 12 additions and 2 deletions
+2 -2
View File
@@ -99,14 +99,14 @@ class Tabular(Pipeline):
columns = self.textcolumns
if not columns:
columns = list(df.columns)
if self.idcolumn:
if self.idcolumn is not None:
columns.remove(self.idcolumn)
# Transform into (id, text, tag) tuples
# Tuple iteration preserves column types instead of coercing each row to one dtype.
for index, values in zip(df.index, df.itertuples(index=False, name=None)):
row = dict(zip(df.columns, values))
uid = row[self.idcolumn] if self.idcolumn else index
uid = row[self.idcolumn] if self.idcolumn is not None else index
uid = uid if uid is not None else index
text = self.concat(row, columns)
+10
View File
@@ -157,6 +157,16 @@ class TestTabular(unittest.TestCase):
self.assertIsNone(data["metadata"])
def testFalsyIDColumn(self):
"""
Explicit column labels are used for IDs and excluded from default text.
"""
for column in ("", 0, "id"):
with self.subTest(column=column):
rows = Tabular(idcolumn=column)([{column: "doc-7", "text": "hello"}])
self.assertEqual(rows, [("doc-7", "hello", None)])
def testNoColumns(self):
"""
Test creating text without specifying columns