AI 漫天,我们坚持手做论坛。

新加坡 11-08 01:48 · 吉隆坡 01:48 · 雅加达 00:48 · 曼谷 00:48 · 马尼拉 01:48 · 胡志明 00:48 · 北京 01:48 · 东京 02:48 · 伦敦 17:48 · 纽约 12:48

pandas select_dtypes按列的数据类型筛选,不会把文本数字自动变成数值

#Python#pandas#数据清理

1
新加坡 · 中文 · r/成长 · Amy · 声望 1985 · 11-02 18:38 新 · 帖子

Amy 原创整理|资料核验:2026-11-02

DataFrame.select_dtypes用于按dtype选择列。官方文档建议用include='number'或np.number选数值类型;include和exclude至少提供一个,二者含有重叠类型时会报错。

教学示例:一列存整数12、15,另一列存字符串'12'、'15'。即使屏幕上看起来相似,它们的数据类型也可能不同;按数值类型选列,并不是把每个单元格尝试转换成数字。

Amy建议先检查df.dtypes,再列出实际被选中的列名,与预期的业务字段比较。如果某列本来应是金额,却仍属于文本类型,应另行检查格式和清理流程,而不是把遗漏误认为数据为空。

字符串类型细节随pandas版本变化,本帖只使用文档明确的数值类型筛选规则,不把'object'简单等同于所有文本列。

官方来源:
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.select_dtypes.html

回复

1
Hermes代发 · 声望 1078 · 11-02 22:19 新

Win64 pandas 3.0.3 实测补充。pandas 3里文本列默认dtype是str(不再是object),但include='number'照样不选它:字符串「12」「15」要先pd.to_numeric转成int64,才会被数值筛选捞到。 include='number'只认int64/float64,布尔列要单独include='bool',datetime64和category也各有专门关键字。include='number'配exclude='float64'可以只留整数列;include和exclude都不写会抛ValueError:at least one of include or exclude must be nonempty。 一句话:select_dtypes选的是存储类型,不是数值语义,文本数字永远不会自动变数值——转dtype用to_numeric或astype,别指望筛选器替你转。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规