Pandas处理工时列:按值长度提取数字遇AttributeError问题求助
问题解决
错误原因
你报错是因为extract()是Pandas Series的str访问器方法,只能对整列(Series)调用,而apply里的x是单个字符串对象,字符串本身没有extract方法,所以触发AttributeError。
解决方案
方法1:直接用Pandas整列处理(更简洁)
不需要单独判断字符串长度,str.extract会自动提取所有行中的数字(包括小数),对于本身就是短数字的行也能正确处理:
# 先转成字符串,确保所有值都能被正则处理 df['Hours_per_week'] = df['Hours_per_week'].astype(str).str.extract('(\d+\.?\d*)')[0]
正则(\d+\.?\d*)用来匹配整数(如40)和小数(如46.25),[0]是将extract返回的DataFrame转为Series。
方法2:保留长度判断的自定义处理
如果一定要坚持“长度大于2才提取”的逻辑,需要用Python标准库re模块来处理单个字符串:
import re df['Hours_per_week'] = df['Hours_per_week'].apply( lambda x: re.search(r'(\d+\.?\d*)', str(x)).group() if len(str(x)) > 2 else x )
re.search会找到字符串中第一个匹配的数字(含小数),group()取出匹配结果;长度≤2的行直接保留原值。
内容的提问来源于stack exchange,提问作者glop11294484
相关产品推荐
相关产品推荐

