Python data.table正则使用(除re.match)及列转整数报错求助
Python data.table 正则使用与列转换问题解答
1. Python data.table 中能否使用除 re.match 外的正则表达式?
可以。Python data.table 支持结合 Python 的 re 模块使用各类正则函数(如 re.sub、re.search 等),但需要注意向量化处理——因为 re 模块的函数默认只处理单个字符串,直接作用于整列会报错,需通过向量化方法对列中每个元素逐一处理。
2. 解决列转换失败的问题
你遇到的 TypeError 本质是 re.sub 无法直接处理 data.table 的列对象(向量),必须逐元素应用正则替换。以下是修正后的可行方案:
方案一:使用 lapply 逐元素处理
import re from datatable import dt, f, update, as_type # 假设 df 是 datatable.Frame 对象 df[:, update(weird_col = dt.lapply(f.weird_col, lambda x: re.sub(r"\.[0-9]{0,2}|-", "", str(x))))] # 转换为整数 df[:, update(weird_col = as_type(f.weird_col, int))]
方案二:结合 np.vectorize 向量化 re.sub
import re import numpy as np from datatable import dt, f, update, as_type # 包装 re.sub 为向量化函数 vectorized_sub = np.vectorize(lambda x: re.sub(r"\.[0-9]{0,2}|-", "", str(x))) df[:, update(weird_col = vectorized_sub(f.weird_col))] # 转整数 df[:, update(weird_col = as_type(f.weird_col, int))]
关键注意点:
- 必须先将列元素转为字符串(
str(x)),避免因列中存在非字符串类型(如数值、缺失值)导致报错; - 使用 data.table 的
update语法时,通过f.colname引用列更符合 data.table 的语法规范,而非直接用df[:, 'colname']; - 替换完成后,用
as_type显式转换为整数类型。
内容的提问来源于stack exchange,提问作者itarill
相关产品推荐
相关产品推荐

