csv-excel-merger — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited csv-excel-merger (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Merge multiple CSV or Excel files with automatic column matching, deduplication, and conflict resolution.
references/merge_strategies.md — column matching, conflict resolution, and dedup optionsreferences/output_template.md — the merge-report formatreferences/merge_strategies.md for the matching heuristics and the full set of options. import pandas as pd
df1 = pd.read_csv("file1.csv")
df2 = pd.read_csv("file2.csv")
# Normalize, then map column names onto the unified schema
for df in (df1, df2):
df.columns = df.columns.str.lower().str.strip()
df2 = df2.rename(columns={"firstname": "first_name", "e_mail": "email"})
merged = pd.concat([df1, df2], ignore_index=True)
merged = merged.drop_duplicates(subset=["email"], keep="last")
merged.to_csv("merged_output.csv", index=False)references/output_template.md, then offer export options: CSV (UTF-8), Excel (.xlsx), JSON, SQL INSERT statements, or Parquet for large datasets.Never hand back a merge without checking it. After merging, assert the row math holds and the key is actually unique:
total_in = len(df1) + len(df2)
assert len(merged) > 0, "merge produced an empty frame"
assert len(merged) <= total_in, "more rows than inputs — check the concat/join"
assert merged["email"].is_unique, "duplicate keys remain after dedup"
print(f"in: {total_in} rows | out: {len(merged)} rows | removed: {total_in - len(merged)}")
print(f"null keys: {merged['email'].isna().sum()} | columns: {list(merged.columns)}")Report rows in vs. out, duplicates removed, and per-column completeness so the user can sanity-check the numbers against their own expectations.
subset=["email", "company"].pd.read_csv(path, chunksize=...)), report progress, and estimate memory before loading everything at once.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.