Source code for vtools.data.duplicate_index
[docs]
def inspect_duplicate_index(ts, label=None, max_times=5, max_rows=5):
"""
Print a concise diagnostic for duplicate timestamps in a time series.
Parameters
----------
ts : pandas.DataFrame or Series
Time series with DatetimeIndex.
label : str, optional
Context label (e.g., filename or pattern).
max_times : int
Number of duplicate timestamps to report.
max_rows : int
Number of rows per timestamp to print.
"""
import pandas as pd
idx = ts.index
if not isinstance(idx, pd.DatetimeIndex):
print(f"[dup-debug] Index is not DatetimeIndex ({type(idx)})")
return
dup_mask = idx.duplicated(keep=False)
if not dup_mask.any():
print("[dup-debug] No duplicate timestamps detected.")
return
dup_times = idx[dup_mask].unique()
print("\n" + "="*60)
print("[dup-debug] Duplicate timestamp diagnostic")
if label:
print(f"[dup-debug] Context: {label}")
print(f"[dup-debug] Unique duplicate timestamps: {len(dup_times)}")
print(f"[dup-debug] Total duplicate rows: {dup_mask.sum()}")
# show first few duplicate timestamps
for t in dup_times[:max_times]:
print(f"\n[dup-debug] Timestamp: {t}")
rows = ts.loc[t]
if isinstance(rows, pd.Series):
# single row (unlikely here, but safe)
print(rows)
else:
print(rows.head(max_rows))
print("="*60 + "\n")