You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则与lambda转换DataFrame匹配列的dtype为int类型

实现代码

不需要使用applymap,按列筛选后批量转换即可,完整可运行代码如下:

import pandas as pd
import re

df = pd.DataFrame({'a':['123','667','323'],
                   'b':['8000','1. 300', '56'],
                   'c':['11','apple', '100']})

pattern = r'^\d+$'
# 筛选所有元素均为纯数字字符串的列
match_cols = df.apply(lambda x: x.str.match(pattern, flags=re.IGNORECASE).all())
# 对符合条件的列批量转换为int类型
df[match_cols[match_cols].index] = df[match_cols[match_cols].index].astype(int)

# 查看转换后的数据类型
print(df.dtypes)

运行后输出的dtype中a列会变为int类型,其余列保持原object类型,符合需求。

逻辑说明

  • 用apply对每列执行正则匹配判断,通过.all()筛选出整列所有元素都符合纯数字规则的列
  • 直接对筛选出的列批量执行astype(int)完成类型转换,列级操作的执行效率远高于逐元素处理

关于applymap的说明

你这种场景完全不需要使用applymap:applymap是逐元素操作,而你的判断逻辑是整列维度的,先按列筛选再整列转换的逻辑更简洁,性能也更好。

内容的提问来源于stack exchange,提问作者Chuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:54:03