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:它既不会让一个坏值毁掉整个程序,又不会放过坏值,而是把它们显式暴露成缺失值,交给你决定删除还是填充。

相关推荐
全栈练习生12 小时前
AI Agent 沙箱
python·ai
SEO_juper13 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
用户83562907805114 小时前
使用 Python 对 Excel 工作表进行排序
后端·python
for_ever_love__14 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
用户83562907805114 小时前
使用 Python 合并 PowerPoint 演示文稿
后端·python
weixin_4617694015 小时前
VS Code 中创建 Jupyter 文件(.ipynb)
ide·python·jupyter
2601_9669496515 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
全栈弄潮儿15 小时前
Python实战第1期:Python环境搭建与第一个程序
python
心易行者15 小时前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
weixin1997010801615 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存