如何用正则与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
相关产品推荐
相关产品推荐

