Pandas教学-6:coerce详解

coerce 详解------"强行扭转"的意思

一、英文本义

coerce 读作 /kəʊˈɜːs/(扣-厄斯),动词,本义是"强制、迫使、用强力扭转"。

词源来自拉丁语 coercere = co- (一起)+ arcere (约束、压制),字面意思是"强行关到一个框里"。

日常生活中:coerce sb. into doing sth. = 胁迫某人做某事。

二、编程里的 coerce:强制类型转换

在程序世界,coerce 特指把数据强行扭转 成另一种类型,中文叫"强制转换":

复制代码
"123"  ──coerce──►  123        字符串硬转成数字
True   ──coerce──►  1          布尔值硬转成数字
"abc"  ──coerce──►  ???        转不成数字怎么办?

关键就在最后一行:转不过去的时候怎么办 ?pandas 给了三种态度,由 errors 参数控制:

errors 取值 态度 遇到 "abc" 转数字 比喻
"raise"(默认) 报错罢工:我转不了,程序直接崩溃 抛 ValueError 严格的老师:题目有问题,我拒绝批改
"ignore" 视而不见:整列原样退回,什么都不转 保持 "abc" 原样 和稀泥:算了算了,都别动
"coerce" 强行处理 :转得过去就转,转不过去的强制标记为"缺失" 变成 NaN 务实的老师:能改的改,改不了的标红挂起,不耽误全班

所以 coerce 的完整含义是:

能转的照常转,转不动的不强转成假数据,而是统一"扭成"缺失值标记(NaN / NaT),保证流程继续往下走。

三、对应到你案例6里的代码

python 复制代码
pd.to_datetime(df["下单日期"], format="mixed", errors="coerce")

意思就是:

复制代码
"2024-03-05"   ──能转──► 2024-03-05(真正的日期)
"20240308"     ──能转──► 2024-03-08
"二零二四年"    ──转不动──coerce──► NaT(Not a Time,日期版的"空")

这个 NaT 就是 coerce 强行扭转后的产物------它不是报错,而是一个"我认识到这是空日期 "的记号,后面可以用 .isna() 把这些坏值找出来,再用 fillna() 统一兜底:

python 复制代码
df["下单日期"] = df["下单日期"].fillna(pd.Timestamp("2024-03-01"))

同样的写法在 to_numeric 里也出现过(case03 工资列里的 "abc"):

python 复制代码
pd.to_numeric(df["工资"], errors="coerce")   # "abc" -> NaN,然后用中位数填充

四、一个对比小实验(课堂可直接演示)

python 复制代码
s = pd.Series(["12", "34", "abc"])

pd.to_numeric(s, errors="raise")     # 直接报错,整个程序中断
pd.to_numeric(s, errors="ignore")    # 原样退回:["12","34","abc"],等于没洗
pd.to_numeric(s, errors="coerce")    # [12, 34, NaN] ← 数据清洗唯一实用选择

五、一句话记忆

raise 是"报错停车",ignore 是"假装没看见",coerce 是"过安检"------合格的放行,不合格的统一扣下(标记 NaN/NaT),后续再集中处理。

这也是为什么做数据清洗时几乎总是用 coerce:它既不会让一个坏值毁掉整个程序,又不会放过坏值,而是把它们显式暴露成缺失值,交给你决定删除还是填充。

相关推荐
wflynn12 分钟前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
2601_9679801130 分钟前
python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
python·scapy·pcap·协议分析·网络数据包
心疼你的一切37 分钟前
Python自动发邮件实战定时发报表
大数据·开发语言·python
卡提西亚2 小时前
FastAPI基础入门
python·fastapi
fanruitian3 小时前
python 机器学习 ML LinearRegression KNN KMeans
python·机器学习·kmeans
鱼宵3 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
卷无止境3 小时前
给AI装上一双眼睛:快速构建代码验证器的思路与落地方案
后端·python
维克兜率天3 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
come112343 小时前
Codex 下不同场景 模式选择
python
神也畏惧菠萝4 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse