准备把表格交给 AI 做分析时,先在本地做一个专用副本:删掉任务不需要的直接标识列,遮盖联系方式,再检查剩余字段能否组合识别人。下面的 Python 示例展示机械处理和检查方法,不把遮盖后的表格称为已经匿名。
环境与运行方法
本文代码在 Windows、Python 3.11 的本地独立环境执行通过。以下数据全部为人为构造的教学样本,不是客户数据,也不是业务效果测试。

新建一个空目录,在终端执行安装命令,把后面的完整代码保存为 demo.py,再执行 python demo.py。文件输出均保存在运行目录,请先在空目录练习。
python -m pip install pandas==3.0.6
先决定哪些字段真的需要
例如只分析渠道与订单金额,姓名、电话、邮箱、精确地址通常不需要。示例删除 name 和 address,保留电话末四位仅用于演示;真实分析若不需要联系方式,应该直接删除 phone 和 note,而不是只遮盖一部分。
在独立目录处理副本,原表留在受控位置。输出文件只含允许分享的列,索引不导出。不要把原始文件、隐藏工作表或带原值的错误日志一并上传。
同时检查自由文本
note 是备注,可能夹带手机号码。代码用正则遮盖示例中的11位号码,并把专门的 phone 列遮盖成星号加末四位。正则只是一条明确的匹配规则,不会理解所有写法。
上线前列出身份证、电子邮件、账号等真实数据类型,分别建立规则并抽样复核。带空格、区号、全角数字的电话可能漏检;姓名、职业和小地区的组合也可能重新识别人。去掉姓名后仍有这些字段,不能保证匿名。
可复制的完整代码
import re
import pandas as pd
df = pd.DataFrame({"name": ["示例用户"], "address": ["演示地址"],
"phone": ["13800001234"], "channel": ["web"],
"amount": [50], "note": ["请联系13800001234确认"]})
masked = df.drop(columns=["name", "address"]).copy()
masked["phone"] = masked["phone"].map(lambda v: "*******" + str(v)[-4:])
masked["note"] = masked["note"].map(lambda v: re.sub(r"(?<!\d)1[3-9]\d{9}(?!\d)", "[PHONE]", v))
assert "13800001234" not in masked.to_csv(index=False)
assert "name" not in masked and "address" not in masked
masked.to_csv("masked_example.csv", index=False, encoding="utf-8-sig")
print(masked.to_string(index=False))
运行结果与核对方法
下面是本文教学代码在上述本地环境中的实际输出。浮点数末位可能随依赖版本变化。
phone channel amount note
*******1234 web 50 请联系[PHONE]确认
打开 masked_example.csv,确认没有 name、address 列,phone 只保留星号和末四位,note 中号码变成 [PHONE]。再人工检查列名、每个自由文本字段和导出文件;确认分析任务不需要的剩余标识已删除后才考虑提供给 AI。
使用边界与常见问题
这是对虚构号码的本地遮盖演示,不是匿名化认证,也不能保证真实资料不会被重新识别。敏感或无授权的数据不能仅凭这段脚本就上传;对外提供前仍需遵守实际业务的数据使用要求。
为什么不把手机号哈希后直接发出去?
无盐哈希仍可能被枚举匹配,保留关联编号也属于可链接信息。若任务不需要识别或关联个人,直接删掉该字段更清楚;确需关联时应单独设计受控映射及访问方式。
官方资料
接口与参数依据以下官方资料核对(2026年10月1日)。示例验证只覆盖本文输入和步骤。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30258.html