如何将pandas str.find的计算结果应用到其他列实现非循环数据提取
报错原因
你之前的df["Data"].str[df["Ptr"]]写法报错,是因为pandas字符串访问器的[]运算符默认按标签索引,不会自动逐行取对应位置的切片,所以不能直接传入位置序列使用。
方法1:正则表达式实现(最简洁)
直接用pandas内置的str.extract方法匹配提取目标数值,全程矢量化操作,无需循环:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ "Data": ["Good Temperature 14.0", "Bad Temperature 28.0", "Very Odd Temperature -42.3"] }) # 提取Temperature后的浮点数,直接转float类型 df["Temperature"] = df["Data"].str.extract(r'Temperature\s*(-?\d+\.?\d*)').astype(float)
正则模式说明:\s*适配Temperature和数值之间的任意个空格,-?匹配可选负号,\d+\.?\d*匹配整数、小数格式的数字。
方法2:基于原有位置计算逻辑实现
如果不想用正则,可以用str.slice方法实现逐行按位置切片,支持传入Series作为起始位置参数:
# 计算数值起始位置 df["Ptr"] = df["Data"].str.find("Temperature") + len("Temperature") # 从起始位置切片后转float df["Temperature"] = df["Data"].str.slice(start=df["Ptr"]).astype(float)
两种方法最终得到的Temperature列都是浮点类型的目标数值,性能远高于逐行循环。
内容的提问来源于stack exchange,提问作者Tunneller
相关产品推荐
相关产品推荐

