From abb61a0c3684aebc6f675e6be522048e5881f226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20C=C3=ADfka?= Date: Thu, 22 Jan 2026 18:25:33 +0100 Subject: [PATCH 1/3] Load RTTM with `keep_default_na=False` --- src/pyannote/database/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyannote/database/util.py b/src/pyannote/database/util.py index 07d4bcf..e1e670d 100644 --- a/src/pyannote/database/util.py +++ b/src/pyannote/database/util.py @@ -180,7 +180,7 @@ def load_rttm(file_rttm, keep_type="SPEAKER"): names=names, dtype=dtype, sep=r"\s+", - keep_default_na=True, + keep_default_na=False, ) annotations = dict() From a83c483d98092294d09aef5b337162de6786ed48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20C=C3=ADfka?= Date: Thu, 22 Jan 2026 19:02:24 +0100 Subject: [PATCH 2/3] Add handling for NA values in non-float columns --- src/pyannote/database/util.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pyannote/database/util.py b/src/pyannote/database/util.py index e1e670d..7297168 100644 --- a/src/pyannote/database/util.py +++ b/src/pyannote/database/util.py @@ -175,11 +175,13 @@ def load_rttm(file_rttm, keep_type="SPEAKER"): "NA6", ] dtype = {"uri": str, "start": float, "duration": float, "speaker": str} + na_values = {n: [""] for n in names if dtype.get(n) is not str} data = pd.read_csv( file_rttm, names=names, dtype=dtype, sep=r"\s+", + na_values=na_values, keep_default_na=False, ) From 1d5c784119c313e21216c7456e0578bfd27dac3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20C=C3=ADfka?= Date: Thu, 22 Jan 2026 19:20:48 +0100 Subject: [PATCH 3/3] Allow for all but replace with None for string columns --- src/pyannote/database/util.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pyannote/database/util.py b/src/pyannote/database/util.py index 7297168..95bb026 100644 --- a/src/pyannote/database/util.py +++ b/src/pyannote/database/util.py @@ -175,24 +175,25 @@ def load_rttm(file_rttm, keep_type="SPEAKER"): "NA6", ] dtype = {"uri": str, "start": float, "duration": float, "speaker": str} - na_values = {n: [""] for n in names if dtype.get(n) is not str} data = pd.read_csv( file_rttm, names=names, dtype=dtype, sep=r"\s+", - na_values=na_values, + na_values=[""], keep_default_na=False, ) annotations = dict() for uri, turns in data.groupby("uri"): + if pd.isna(uri): + uri = None annotation = Annotation(uri=uri) for i, turn in turns.iterrows(): if turn.type != keep_type: continue segment = Segment(turn.start, turn.start + turn.duration) - annotation[segment, i] = turn.speaker + annotation[segment, i] = turn.speaker if not pd.isna(turn.speaker) else None annotations[uri] = annotation return annotations