如何拆分pandas DataFrame中首字符为数字的Value列值提取单位
错误原因
你的代码存在三个语法/逻辑问题:
- Python三元表达式要求必须完整写为
值 if 条件 else 默认值,你缺失了else分支,触发语法错误 - 代码中
str[0]的str是未定义的变量,无法直接指代当前行的Value字段值 - 条件判断中
is <=是错误写法,is用于对象身份判断,数值比较直接用<=即可,同时你没有提前判断拆分后是否存在第二部分,容易触发索引错误
实现代码
方法1:apply自定义函数(易读性高,适合逻辑复杂的场景)
def extract_unit(val): # 处理空白字符串 val = val.strip() if not val: return "" # 校验首字符是否为数字 if not val[0].isdigit(): return "" # 仅拆分第一个空格,避免单位本身带空格的情况 parts = val.split(" ", maxsplit=1) if len(parts) < 2: return "" unit = parts[1].strip() # 校验单位长度是否符合要求 return unit if len(unit) <=5 else "" df['Unit'] = df['Value'].apply(extract_unit)
方法2:向量化操作(性能更高,适合百万级以上的大数据量)
# 拆分数值和单位 split_val = df['Value'].str.split(" ", n=1, expand=True) # 构造判断条件 cond1 = df['Value'].str.strip().str[0].str.isdigit().fillna(False) cond2 = split_val[1].str.strip().str.len().le(5).fillna(False) # 符合条件赋值单位,否则填空字符串 df['Unit'] = split_val[1].str.strip().where(cond1 & cond2, "")
两种方法运行后都可以得到你期望的输出结果,80 degrees因为拆分后的degrees长度超过5,所以不会被提取单位,符合要求。
内容的提问来源于stack exchange,提问作者Al-Andalus
相关产品推荐
相关产品推荐

